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
dataframe
df
,其中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”,实际上没有条。所以,颜色不重要。