标签: seaborn

如果单元格值高于 0.05,seaborn 不会在热图中给出颜色

我已经创建了热图,我想设置一个条件,如果单元格值高于 0.05,它将获得 cmap 中没有的特定颜色。现在我所做的是定义 vmin 和 vmax,但问题是 vmax 仍然得到 0.5 或 0.6 值,并且我不能确定条件是否真的保持不变。

green=sns.light_palette("seagreen",reverse=True,as_cmap=True)
sns.set(rc={'figure.figsize':(18.7,3.27)})
sns.heatmap(fhtmp,square=True,cmap=green,linewidths=.5,vmin=0, vmax=0.05)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

正如你在这里看到的,我真的不知道紫色的值是否等于 0.05 还是大于 0.05,我希望能够区分,因此如果值大于 0.05,单元格将具有不同的颜色,例如白色或灰色。

编辑:我设法使用一种面具,但绿色有一种色调,而面具有多种颜色。

sns.set(rc={'figure.figsize':(18.7,3.27)})
ax = sns.heatmap(fhtmp, cmap=green, center=0.8, square=True, 
                 linewidth=.5, vmin=0, vmax=0.05)
ax = sns.heatmap(fhtmp, mask=fhtmp < 0.053, cmap='Blues', square=True, annot=False, vmin=0.053, vmax=0.53, cbar=False, ax=ax)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 这就是我得到的,这仍然不是想要的结果

python heatmap colorbar seaborn

1
推荐指数
1
解决办法
2382
查看次数

将 ax.twinx() 与 sns.FacetGrid 和 sns.lineplot 结合使用

我试图在每个方面图上应用共享的 x 轴,'total_bill'左侧 y 轴和'tip'右侧 y 轴。使用tips数据框进行演示。

tip使用以下数据集:

import pandas as pd
import numpy as np
from datetime import datetime, timedelta

date_today= datetime.now()
days = pd.date_range(date_today, date_today + timedelta(tips.shape[0]-1), freq='D')
tips = sns.load_dataset("tips")
tips['date'] = days
Run Code Online (Sandbox Code Playgroud)

数据集预览:

tips.head()
Run Code Online (Sandbox Code Playgroud)
总帐单 提示 性别 吸烟者 时间 尺寸 日期
0 16.99 1.01 女性 太阳 晚餐 2 2021-01-19 16:39:38.363600
1 10.34 1.66 男性 太阳 晚餐 3 2021-01-20 16:39:38.363600
2 21.01 3.5 男性 太阳 晚餐 …

matplotlib python-3.x pandas seaborn

1
推荐指数
1
解决办法
1482
查看次数

如何创建带有边缘直方图的热图(类似于联合图)?

我想绘制二维标量数据,我通常会使用matplotlib.pyplot.imshow或来绘制sns.heatmap。考虑这个例子:

data = [[10, 20, 30], [50, 50, 100], [80, 60, 10]]
fix, ax = plt.subplots()
ax.imshow(data, cmap=plt.cm.YlGn)
Run Code Online (Sandbox Code Playgroud)

3x3 imshow 绘图

现在我还想在顶部和右侧有一维条形图,显示每列/行中的值的总和 - 就像那样sns.jointplot。然而,sns.jointplot似乎只适用于分类数据,生成直方图(带有kind='hist')、散点图等 - 如果我想直接指定单元格的值,我不知道如何使用它。对于seaborn 来说这样的事情可能吗?

我的图中的轴y将是天(一个月内),x轴将是小时。我的数据如下所示:

包含小时、日期和值的 DataFrame

该字段Cost Difference应构成图中相应字段的阴影。

matplotlib heatmap seaborn

1
推荐指数
1
解决办法
3583
查看次数

Python 中的多个时间序列的 3D 绘图

我已经看过许多在 Python 中使用 matplotlib/seaborn 进行 3D 绘图的示例,但似乎无法得到我正在寻找的东西;我有 50 个左右的时间序列,我想将它们清晰地绘制出来,如下例所示,但在轴上使用系列名称;作为我在 Goog、IBM、GE、百事可乐等中标记的示例。感谢任何指示或示例。谢谢你,

示例图请点击这里

python data-visualization matplotlib timeserieschart seaborn

1
推荐指数
1
解决办法
3109
查看次数

在错误的 x 轴上的热图绘制线顶部的辅助 y 轴上创建线图

我有两张表,一张是从热图生成的,一张是需要在辅助 y 轴上绘制折线图的。创建热图没有问题:

green = sns.light_palette("seagreen", reverse=True, as_cmap=True)
green.set_over('tomato')
sns.set(rc={'figure.figsize': (20.7, 10.27)})
sns.set(font_scale=2)
ax=sns.heatmap(df, square=True, linewidths=.5, annot=False, fmt='.3f',
               cmap=green, vmin=0, vmax=0.05)
    
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

当我尝试在热图顶部绘制线条时,问题就开始了。该线应具有相同的 x 轴值,并且这些值应位于辅助 y 轴中。df 行如下所示:

>>>day     value
0  14       315.7
1  15       312.3
2  16       305.9
3  17       115.2
4  18       163.2
5  19       305.78
...
Run Code Online (Sandbox Code Playgroud)

我尝试将其绘制在顶部,如下所述

green = sns.light_palette("seagreen", reverse=True, as_cmap=True)
green.set_over('tomato')
sns.set(rc={'figure.figsize': (20.7, 10.27)})
sns.set(font_scale=2)
ax=sns.heatmap(df, square=True, linewidths=.5, annot=False, fmt='.3f',
              cmap=green, vmin=0, vmax=0.05)

ax2=plt.twinx()
ax2.plot(df_line['day'], df_line['value'],color="blue")
line = ax2.lines[0]
line.set_xdata(line.get_xdata() + 0.5)


plt.show()
Run Code Online (Sandbox Code Playgroud)

但后来我把线“移”到了左侧,我在 …

python matplotlib heatmap line-plot seaborn

1
推荐指数
1
解决办法
1455
查看次数

绘制按变量分组的多个seaborn kde

我在尝试从seaborn绘制多个kde时遇到了一些麻烦。我目前正在研究有关 Pokemons 的数据库:

https://github.com/GaetanLF/Fill-the-Pokedex/blob/main/PokemonNew.csv

然后,我尝试绘制代表 HP 的 kde(当 Generation = 1 时为 1 kde,当 Generation = 2 时为 1 等)。我尝试了不同的规范并阅读了seaborn的文档,但我不知道如何做到这一点。我尝试过的最相关的代码是:

sns.kdeplot(x=df["HP"],data=df.groupby(['Generation']))
Run Code Online (Sandbox Code Playgroud)

这给我返回了一个 kde :

凯德

我怎么能歧视一代呢?

python pandas seaborn

1
推荐指数
1
解决办法
882
查看次数

Seaborn 中使用数字数据作为色调的堆积条形图

我有一个简单的 pandas 数据框,包含 3 列(月份、金额、类别),其中每行代表特定类别的费用:

import pandas as pd

d = {'Month': ['Jan', 'Jan', 'Jan', 'Feb', 'Feb', 'Mar', 'Mar', 'Mar', 'Mar'], 'Amount': [5, 65, 29, 200, 28.5, 12, 4, 100, 21], 'Category': ['Travel', 'Food', 'Dentist', 'Dentist', 'Food', 'Travel', 'Food', 'Sport', 'Sport']}
df = pd.DataFrame(df)
Run Code Online (Sandbox Code Playgroud)

我想创建一个seaborn条形图,其中每个条形代表每月的支出总额,每个条形都分为不同的颜色,其中每种色调代表该月特定类别的总支出。

我能够使用相当复杂的方法并使用 matplotlib 进行绘图来实现结果:

df = df.groupby(['Month', 'Category']).sum()   
df.reset_index(inplace=True)
pivot_df = df.pivot(index='Month', columns='Category', values='Amount')
df.plot.bar(stacked=True, colormap='tab20')
Run Code Online (Sandbox Code Playgroud)

但这种方法在尝试使用seaborn时会出错,而且似乎没有必要复杂。

有没有更好的方法来达到想要的结果?

python dataframe pandas stacked-chart seaborn

1
推荐指数
1
解决办法
3514
查看次数

Seaborn 热图错误:“AttributeError:‘NoneType’对象没有属性‘reshape’”

我正在做一个 NLP 项目,研究 10 位不同经典摇滚艺术家各自作品之间的余弦相似度。我已经完成了相似性查询并创建了一个名为的数据框,similarities如下所示。

在此输入图像描述

similarities通过首先构建一个空数据框来构建数据框,其中以艺术家姓名作为索引和列名称,然后运行以下代码来运行相似性查询并使用分数填充数据框:

        
    artist_words = data['lyrics'][artist]
    
    artist_vec_bow = dictionary.doc2bow(artist_words.lower().split())
    artist_vec_lsi = lsi[artist_vec_bow]
    
    artist_sims = index[artist_vec_lsi]
    
    artist_sims_sorted = sorted(enumerate(artist_sims), key=lambda item: -item[1])
    
    for position, score in artist_sims_sorted:
    
        similarities.at[artist, musicians[position][1]] = score 
Run Code Online (Sandbox Code Playgroud)

data是一个数据框,以艺术家姓名作为索引,并有一列名为 ,lyrics其中歌词作为一个长字符串输入。

我想创建一个 Seaborn 热图来可视化 DataFrame 中指示的相关性。

但是当我运行以下代码时:

sns.heatmap(similarities)

我收到一条很长的错误消息,其结尾为:

AttributeError: 'NoneType' object has no attribute 'reshape'

谁能帮我弄清楚如何形象化这一点?

similarities.info()返回以下内容:

Index: 11 entries, bob_dylan to willie_nelson
Data columns (total 11 columns):
 #   Column          Non-Null Count  Dtype 
---  ------          --------------  ----- …
Run Code Online (Sandbox Code Playgroud)

python matplotlib heatmap correlation seaborn

1
推荐指数
1
解决办法
3949
查看次数

Python:在单行的两个不同列中绘制逗号分隔值(Pandas)

假设我有一个结构如下的数据框:

Name        x        y
Joe       0,1,5    0,3,8
Sue       0,2,8    1,9,5
...
Harold    0,5,6    0,7,2
Run Code Online (Sandbox Code Playgroud)

我想将 x 轴和 y 轴中的值绘制在基于行的折线图上。实际上,有许多 x 和 y 值,但这些列中的每个 y 值始终对应一个 x 值。绘图的名称将是“名称”中的值。

我尝试通过首先将 x 和 y 转换为各自单独列中的列表来实现此目的,如下所示:

df['xval'] = df.['x'].str.split(',')
df['yval'] = df.['y'].str.split(',')
Run Code Online (Sandbox Code Playgroud)

然后将它们传递给seaborn:

ax = sns.lineplot(x=df['xval'], y=df['yval'], data=df)
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用,因为 1)我收到一个错误,我认为这是由于尝试从数据帧传递列表所致,声称:

TypeError: unhashable type: 'list'
Run Code Online (Sandbox Code Playgroud)

2)我无法为特定线图指定 df['name'] 的值。解决这个问题的最佳方法是什么?

python list matplotlib pandas seaborn

1
推荐指数
1
解决办法
875
查看次数

让每个直方图箱具有不同的颜色

我绘制了一个直方图,并希望每个垃圾箱都有不同的颜色。现在我收到错误消息: “‘color’关键字参数每个数据集必须有一种颜色,但提供了 1 个数据集和 10 种颜色”

我还附上了直方图的屏幕截图。提前致谢 直方图

decades = np.arange(1910, 2020, 10)
colors = ['aqua', 'red', 'gold', 'royalblue', 'darkorange', 'green', 'purple', 'cyan', 'yellow', 'lime']

plt.figure(figsize=(12,7))
plt.hist(df.Year, bins=decades, color=colors)
plt.xticks(decades);
Run Code Online (Sandbox Code Playgroud)

python matplotlib histogram pandas seaborn

1
推荐指数
1
解决办法
7436
查看次数