如何在stackplot中使用Matplotlib代理艺术家?

时间:2014-04-10 08:54:56

标签: matplotlib

示例(在ipython --pylab中运行):

x = arange(25)
Y = maximum(0,2+randn(7,25))
stackplot(x,Y)
legend(('A','B','C','D','E','F','G'))

问题:而不是正确的图例,我得到一个空矩形。这是known issue,其中一个解决方法是使用另一个支持图例的绘图元素,也称为 proxy artist 。现在我想知道这个成语是如何通过七个数据系列翻译成我的情况的。这是我试过的:

 proxy = [Rectangle((0,0), 0,0) for _ in Y]
 legend(proxy, ('A','B','C','D','E','F','G'))

现在我有一个包含7个元素的图例,但它们都是蓝色的。如何让代理艺术家匹配stackplot颜色?

1 个答案:

答案 0 :(得分:6)

您可以从形成堆叠图的PolyCollections中读取颜色。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

x = np.arange(25)
Y = np.maximum(0,2+np.random.randn(7,25))

fig, ax = plt.subplots()

sp = ax.stackplot(x,Y)

proxy = [mpl.patches.Rectangle((0,0), 0,0, facecolor=pol.get_facecolor()[0]) for pol in sp]

ax.legend(proxy, ('A','B','C','D','E','F','G'))

enter image description here