假设,我有下面的条形图:
有什么想法如何设置不同的颜色为每个载体?作为例如,AK将是红色,GA将是绿色,等等?
我在Python中使用Pandas和matplotlib
>>> f=plt.figure()
>>> ax=f.add_subplot(1,1,1)
>>> ax.bar([1,2,3,4], [1,2,3,4])
<Container object of 4 artists>
>>> ax.get_children()
[<matplotlib.axis.XAxis object at 0x6529850>, <matplotlib.axis.YAxis object at 0x78460d0>, <matplotlib.patches.Rectangle object at 0x733cc50>, <matplotlib.patches.Rectangle object at 0x733cdd0>, <matplotlib.patches.Rectangle object at 0x777f290>, <matplotlib.patches.Rectangle object at 0x777f710>, <matplotlib.text.Text object at 0x7836450>, <matplotlib.patches.Rectangle object at 0x7836390>, <matplotlib.spines.Spine object at 0x6529950>, <matplotlib.spines.Spine object at 0x69aef50>, <matplotlib.spines.Spine object at 0x69ae310>, <matplotlib.spines.Spine object at 0x69aea50>]
>>> ax.get_children()[2].set_color('r') #You can also try to locate the first patches.Rectangle object instead of direct calling the index.
对于上面的建议,我们到底如何才能枚举ax.get_children()
并检查对象类型是否为矩形?所以如果对象是矩形,我们将分配不同的随机颜色?
3条答案
按热度按时间irtuqstp1#
简单,只需使用
.set_color
对于你的新问题,也不难,只需要从你的坐标轴上找到一个横杠,一个例子:
如果您有一个复杂的图,并希望首先识别条形图,请添加以下内容:
pod7payv2#
我假设你正在使用Series.plot()来绘制你的数据。如果你在这里查看Series.plot()的文档:
http://pandas.pydata.org/pandas-docs/dev/generated/pandas.Series.plot.html
没有列出 color 参数,您可以在其中设置条形图的颜色。
然而,Series.plot()文档在参数列表的末尾声明了以下内容:
这意味着,当您将Series.plot()的 kind 参数指定为 bar 时,Series.plot()实际上将调用matplotlib.pyplot.bar(),并且matplotlib.pyplot.bar()将发送您在Series.plot()参数列表末尾指定的所有额外关键字参数。
如果你在这里查看matplotlib.pyplot.bar()方法的文档:
http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.bar
..它还接受位于其参数列表末尾的关键字参数,如果仔细阅读已识别的参数名称列表,其中一个是 color,它可以是指定条形图不同颜色的序列。
综上所述,如果在Series.plot()参数列表的末尾指定 color 关键字参数,关键字参数将被转发到matplotlib.pyplot.bar()方法。下面是证明:
请注意,如果序列中的条数多于颜色数,则颜色将重复。
fnatzsnv3#
更新pandas 0.17.0
@7stud对最新Pandas版本的回答需要调用
而不是
绘图函数已成为Series、DataFrame对象的成员,* 实际上,使用
color
参数调用pd.Series.plot
会产生错误 *