python matplotlib:为堆栈图添加标签并正确设置它们的颜色
Posted
技术标签:
【中文标题】python matplotlib:为堆栈图添加标签并正确设置它们的颜色【英文标题】:python matplotlib: add labels and set their colours correctly for a stackplot 【发布时间】:2015-08-03 15:01:15 【问题描述】:我正在创建一个堆叠图。我通过自己的实验和在线研究了解到,将标签添加到堆叠图很麻烦,但我已经设法使用下面的代码完成了。
我的问题是:如何检索用于创建堆叠图的颜色循环,以便为图例分配正确的颜色?
现在字段 1 呈蓝色,字段 2 呈绿色,但两个标签都以第一种颜色显示。我可以为绘图和图例强制使用特定颜色,但我非常喜欢默认颜色循环并希望继续使用它。
df=pd.DataFrame(np.ones((10,2)),columns=['field1','field2'])
fig,ax=plt.subplots()
plt.suptitle('This is a plot of ABCDEF')
ax.stackplot(df.index,df.field1,df.field2]
patch1=matplotlib.patches.Patch(color='red',label= 'field 1')
patch2=matplotlib.patches.Patch(color='blue', label ='field 2')
plt.legend(handles=[patch1,patch2])
我找到的最接近解决方案的是:Get matplotlib color cycle state 但是,如果我理解正确,则不会保留颜色的顺序。问题是
ax._get_lines.color_cycle
返回一个迭代器,而不是一个列表,所以我不能轻易地做类似的事情
colour of patch 1 = ax._get_lines.color_cycle[0]
谢谢!
【问题讨论】:
有什么原因不能从迭代器中列出,例如:list(ax._get_lines.color_cycle)
?
我不知道为什么,但它不起作用。我尝试运行它,python 似乎卡住了:1 多分钟后,仍然没有。它可能与 matplotlib 的许多未记录或记录不充分的功能之一有关。如果有人解释为什么它不起作用,我会最感兴趣。
PS 实际上,尝试 colors= list(ax._get_lines.color_cycle) 使整个 IDE (Spyder) 崩溃了 3 次,我不知道为什么...
【参考方案1】:
您可以从 stackplot 制作的 polycollection 对象中获取颜色:
fields = ax.stackplot(df.index,df.field1,df.field2)
colors = [field.get_facecolor()[0] for field in fields]
patch1=mpl.patches.Patch(color=colors[0],label= 'field 1')
patch2=mpl.patches.Patch(color=colors[1], label ='field 2')
【讨论】:
以上是关于python matplotlib:为堆栈图添加标签并正确设置它们的颜色的主要内容,如果未能解决你的问题,请参考以下文章
python - 如何在python中使用matplotlib为重叠图添加两个不同的标签?
Python matplotlib可视化:在Matplotlib中为坐标轴刻度添加自定义符号(例如,货币符号¥$等)水平条形图(horizontal bar)
Python matplotlib可视化:用Matplotlib的bar_label函数为条形图添加数值标记(在每一个条形的外侧顶部)
Python使用matplotlib函数subplot可视化多个不同颜色的折线图为指定的子图添加图例信息(legend)