2014-04-10 56 views
2

實施例(在ipython --pylab運行):如何在堆棧圖中使用Matplotlib代理藝術家?

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個元素的傳說,但他們都是藍色的。我如何讓代理藝術家匹配堆棧圖顏色?

+0

自我提醒:使用'--pylab'或'%pylab' [氣餒](http://carreau.github.io/posts/10-No-PyLab-Thanks .ipynb.html)。更好地導入numpy/matplotlib並使用未受污染的名稱空間。 – ojdo

回答

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

相關問題