Python expndtw-1.df.plot设置与数据帧列成比例的颜色 问题:
我有一个Python expndtw-1.df.plot设置与数据帧列成比例的颜色 问题:,python,pandas,matplotlib,colormap,Python,Pandas,Matplotlib,Colormap,我有一个pandasdataframedf,其中6行表示不同的变量。 我想在条形图中绘制前两列,我想使用第三列score根据现有的颜色贴图(例如matplotlibviridis one)为条形图着色 此数据帧如下所示: ID count score 0 4 1 3 1 5 4 4 2 5 8 5 3 3 7 2 4 1 5 5 5 1
pandas
dataframedf
,其中6行表示不同的变量。我想在条形图中绘制前两列,我想使用第三列
score
根据现有的颜色贴图(例如matplotlib
viridis one)为条形图着色
此数据帧如下所示:
ID count score
0 4 1 3
1 5 4 4
2 5 8 5
3 3 7 2
4 1 5 5
5 1 3 4
目前我的代码是什么样子的:
df.plot('ID', 'count', kind='bar', figsize=(15,5), ax=plt.subplot(122), colors=cm.viridis.colors)
plt.show()
但所有酒吧的颜色都是独一无二的紫色。比方说,我想根据我的
得分列中的值按比例对viridis颜色图进行采样。
有没有一个简单的方法来实现这一点
编辑[2019-10-31]:
使用第一个答案中建议的seaborn
会给我一个错误:
my_palette = sns.color_palette(plt.get_cmap('viridis'), 5)
sns.barplot(x="New ID", y="count", hue="Note", data=df, palette=my_palette)
返回的错误为:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-48-1943cafa0d79> in <module>
----> 1 my_palette = sns.color_palette(plt.get_cmap('viridis'), 5)
/usr/local/lib/python3.6/dist-packages/seaborn/palettes.py in color_palette(palette, n_colors, desat)
238
239 # Always return as many colors as we asked for
--> 240 pal_cycle = cycle(palette)
241 palette = [next(pal_cycle) for _ in range(n_colors)]
242
TypeError: 'ListedColormap' object is not iterable
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在里面
---->1 my_palette=sns.color_palette(plt.get_cmap('viridis'),5)
/颜色调色板中的usr/local/lib/python3.6/dist-packages/seaborn/paletes.py(调色板,n颜色,desat)
238
239#始终返回我们要求的颜色
-->240 pal_循环=循环(调色板)
241调色板=[范围内(n种颜色)的下一个(pal_循环)]
242
TypeError:“ListedColormap”对象不可编辑
编辑[2019-11-05]:
使用建议的代码会导致生成的图形中出现带有x记号的未对齐条形图(我希望它位于x轴上条形图下方的中心),尤其是当每个类别只有一个条形图时,如下图所示:
此外,我希望能够考虑df['count']
列中的'NaN'
值。
当前,如果有一个'NaN'
值,它将引发一个:
TypeError:不支持/:'str'和'int'的操作数类型
所以,我必须把这个值设为0,即使它不是真的0 最简单的方法是使用以下方法:
import seaborn as sns
ax = sns.barplot(x="ID", y="count", hue="score", data=df, palette=your_palette)
your_palette = sns.color_palette('inferno', n_point)
可以通过以下方式创建调色板:
import seaborn as sns
ax = sns.barplot(x="ID", y="count", hue="score", data=df, palette=your_palette)
your_palette = sns.color_palette('inferno', n_point)
其中n_point
是自定义调色板中不同颜色的数量
希望有帮助。最简单的方法是使用以下方法:
import seaborn as sns
ax = sns.barplot(x="ID", y="count", hue="score", data=df, palette=your_palette)
your_palette = sns.color_palette('inferno', n_point)
可以通过以下方式创建调色板:
import seaborn as sns
ax = sns.barplot(x="ID", y="count", hue="score", data=df, palette=your_palette)
your_palette = sns.color_palette('inferno', n_point)
其中n_point
是自定义调色板中不同颜色的数量
希望有帮助。谢谢你的回答,不幸的是,这给了我一个错误。我的seaborn
版本是0.9.0(使用pip
从PyPi下载)。我更改了代码。对不起,我错了。调色板是一种接受颜色贴图名称和点数的方法。我再次测试了它,现在它可以工作了。我可以看到这些条是随机与x记号对齐的,这很烦人,我搜索了文档,但没有找到任何修复方法。我不认为它们是“随机”对齐的。您提供的示例数据有两个id为1的条目。你希望这些是如何绘制的?谢谢你的回答,不幸的是这给了我一个错误。我的seaborn
版本是0.9.0(使用pip
从PyPi下载)。我更改了代码。对不起,我错了。调色板是一种接受颜色贴图名称和点数的方法。我再次测试了它,现在它可以工作了。我可以看到这些条是随机与x记号对齐的,这很烦人,我搜索了文档,但没有找到任何修复方法。我不认为它们是“随机”对齐的。您提供的示例数据有两个id为1的条目。您希望如何绘制这些图形?如果“分数”中有“NaN”,您希望使用什么颜色?但如果我的count
属性中有“NaN”,则实际上没有条形图。因此,颜色并不重要。如果“分数”中有“NaN”,你想要什么颜色?但是如果我的count
属性中有“NaN”,实际上没有条。所以,颜色不重要。