假设我的条形图如下:
有关如何为每个载体设置不同颜色的任何想法?例如,AK会是Red,GA会是Green等等吗?
我在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()并检查对象类型是否为矩形?因此,如果对象是矩形,我们会分配不同的随机颜色吗?
答案 0 :(得分:90)
简单,只需使用.set_color
>>> barlist=plt.bar([1,2,3,4], [1,2,3,4])
>>> barlist[0].set_color('r')
>>> plt.show()
对于你的新问题,也没有那么难,只需要从你的轴上找到一个条形图,例如:
>>> 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.
如果你有一个复杂的情节,并想先识别这些条形,请添加:
>>> import matplotlib
>>> childrenLS=ax.get_children()
>>> barlist=filter(lambda x: isinstance(x, matplotlib.patches.Rectangle), childrenLS)
[<matplotlib.patches.Rectangle object at 0x3103650>,
<matplotlib.patches.Rectangle object at 0x3103810>,
<matplotlib.patches.Rectangle object at 0x3129850>,
<matplotlib.patches.Rectangle object at 0x3129cd0>,
<matplotlib.patches.Rectangle object at 0x3112ad0>]
答案 1 :(得分:33)
我假设您正在使用Series.plot()来绘制数据。如果你在这里查看Series.plot()的文档:
http://pandas.pydata.org/pandas-docs/dev/generated/pandas.Series.plot.html
没有列出 color 参数,您可以在其中设置条形图的颜色。
但是,Series.plot()文档在参数列表的末尾声明了以下内容:
kwds : keywords
Options to pass to matplotlib plotting method
这意味着当您将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()方法。以下是证据:
import pandas as pd
import matplotlib.pyplot as plt
s = pd.Series(
[5, 4, 4, 1, 12],
index = ["AK", "AX", "GA", "SQ", "WN"]
)
#Set descriptions:
plt.title("Total Delay Incident Caused by Carrier")
plt.ylabel('Delay Incident')
plt.xlabel('Carrier')
#Set tick colors:
ax = plt.gca()
ax.tick_params(axis='x', colors='blue')
ax.tick_params(axis='y', colors='red')
#Plot the data:
my_colors = 'rgbkymc' #red, green, blue, black, etc.
pd.Series.plot(
s,
kind='bar',
color=my_colors,
)
plt.show()
请注意,如果序列中的条形比颜色多,则颜色将重复。
答案 2 :(得分:11)
更新pandas 0.17.0
@ 7stud对最新熊猫版本的回答需要致电
s.plot(
kind='bar',
color=my_colors,
)
而不是
pd.Series.plot(
s,
kind='bar',
color=my_colors,
)
绘图函数已成为Series,DataFrame对象和的成员,实际上调用pd.Series.plot
并带有color
参数会出错