python matplotlib:为stackplot添加标签并正确设置颜色

时间:2015-08-03 15:01:15

标签: python matplotlib

我正在创建一个叠加的情节。我理解,通过自我实验和在线研究,在堆积图中添加标签很麻烦,但我已设法将其与下面的代码联系起来。

我的问题是:如何检索用于创建堆积图的颜色周期,以便我可以为图例指定正确的颜色?

现在,字段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]

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以从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')