python为条形图中的条形图指定不同的颜色

python为条形图中的条形图指定不同的颜色,python,pandas,matplotlib,Python,Pandas,Matplotlib,如何为pandas.DataFrame.plot中的barh图的索引指定不同的颜色?我有一个数据帧: group clicks_per_visit bookings_per_visit rev_per_visit test1 0.90 0.039 0.737 test2 0.87 0.034 0.726

如何为pandas.DataFrame.plot中的barh图的索引指定不同的颜色?我有一个数据帧:

group      clicks_per_visit     bookings_per_visit     rev_per_visit
test1          0.90                0.039                   0.737
test2          0.87                0.034                   0.726
我使用以下方法绘制此图:

temp3.plot(kind='barh',subplots=True,grid=True,figsize=(10,7))
要获取此绘图,请执行以下操作:


我希望条形图有不同的颜色来突出显示不同的测试组,我也愿意接受任何其他想法或解决方案,以便对这些数据进行更“奇特”的可视化

您可以这样做,这是一种非常手动的方式,但它会起作用:

axes = temp3.plot(kind='barh',subplots=True,grid=True,figsize=(10,7))

axes[0].get_children()[0].set_color('r')

这会将第一个轴的第二个条指定为红色,然后您可以通过获取另一个轴和子项来选择其他条。

您可以这样做,这是一种非常手动的方法,但它可以工作:

axes = temp3.plot(kind='barh',subplots=True,grid=True,figsize=(10,7))

axes[0].get_children()[0].set_color('r')

这会将第一个轴的第二个条指定为红色,然后您可以通过获取另一个轴和子项来选择其他条。

熊猫的
DataFrame.plot()
的行为可能很复杂,并不总是直观的。 理论上,您可以将颜色数组传递给
plot()
,该数组将传递给底层的plotting函数

事实上,由于正在绘制3个子图,因此将传递一个包含3个子列表的列表,每个子列表包含每个条的颜色

df.plot(kind='barh', subplots=True,grid=True,figsize=(10,7), color=[['C0','C1']]*3, legend=False)
但是,这样做会导致y轴上的标签消失。出于某种原因,您必须指定要在调用
plot()
时使用的列的名称,才能再次显示

df.plot(kind='barh',x='group', y=['clicks_per_visit','bookings_per_visit','rev_per_visit'], subplots=True,grid=True,figsize=(10,7), color=[['C0','C1']]*3, legend=False)

由于您需要其他可视化选项,我可以向您展示,您可以使用seaborn获得大致相同的输出,使用更简单的语法。唯一的“陷阱”是您必须将数据帧“堆叠”为长格式而不是宽格式

df2 = df.melt(id_vars=['group'],value_vars=['clicks_per_visit', 'bookings_per_visit', 'rev_per_visit'])
plt.figure(figsize=(8,4))
sns.barplot(y='variable',x='value',hue='group', data=df2, orient='h')
plt.tight_layout()

熊猫的
DataFrame.plot()行为可能很复杂,并不总是直观的。
理论上,您可以将颜色数组传递给
plot()
,该数组将传递给底层的plotting函数

事实上,由于正在绘制3个子图,因此将传递一个包含3个子列表的列表,每个子列表包含每个条的颜色

df.plot(kind='barh', subplots=True,grid=True,figsize=(10,7), color=[['C0','C1']]*3, legend=False)
但是,这样做会导致y轴上的标签消失。出于某种原因,您必须指定要在调用
plot()
时使用的列的名称,才能再次显示

df.plot(kind='barh',x='group', y=['clicks_per_visit','bookings_per_visit','rev_per_visit'], subplots=True,grid=True,figsize=(10,7), color=[['C0','C1']]*3, legend=False)

由于您需要其他可视化选项,我可以向您展示,您可以使用seaborn获得大致相同的输出,使用更简单的语法。唯一的“陷阱”是您必须将数据帧“堆叠”为长格式而不是宽格式

df2 = df.melt(id_vars=['group'],value_vars=['clicks_per_visit', 'bookings_per_visit', 'rev_per_visit'])
plt.figure(figsize=(8,4))
sns.barplot(y='variable',x='value',hue='group', data=df2, orient='h')
plt.tight_layout()

这有帮助吗?我试过了,它对我不起作用。也许其他一些库/包(如sns或matplotlib)也有这种灵活性这有帮助吗?我试过了,它对我不起作用。也许其他一些库/包(如sns或matplotlib)具有这种灵活性