2015-12-16 91 views
0

我正在用matplotlib繪製子圖,並且圖例中沒有顯示圖例。 在此示例中,散點圖圖例不顯示。matplotlib圖例中缺少標籤

import numpy as np 
import matplotlib 
from matplotlib import pyplot as plt 
from matplotlib.legend_handler import HandlerLine2D 
from matplotlib.patches import Rectangle, Circle 

fig = plt.figure() 
plt.cla() 
plt.clf() 

x = np.arange(5) + 1 
y = np.full(5, 10) 
fig, subplots = plt.subplots(2, sharex=False, sharey=False) 
subplots[0].bar(x, y, color='r', alpha=0.5, label='a') 
scat = subplots[0].scatter(x, y-1, color='g', label='c') 
subplots[0].set_yscale('log') 

subplots[1].bar(x, y, color='r', alpha=0.5, label='a') 
x = [2, 3] 
y = [4, 4] 
subplots[1].bar(x, y, color='b', alpha=1, label='b') 
subplots[1].set_yscale('log') 

plt.legend(loc='center left', bbox_to_anchor=(1, 0.5), handler_map={scat: HandlerLine2D(numpoints=4)}) 

plt.show() 

這裏是我試過的解決方法:

p1 = Rectangle((0, 0), 1, 1, fc="r", alpha=0.5) 
p2 = Rectangle((0, 0), 1, 1, fc="b") 
p3 = Circle((0, 0), 1, fc="g") 
legend([p1, p2, p3], ['a', 'b', 'c'], loc='center left', bbox_to_anchor=(1, 0.5)) 

我真的喜歡所以如果有人知道如何解決它,請讓我知道解決這個問題沒有解決方法。 另外,解決方法的一個問題是Circle對象仍然在圖例上顯示爲條形。

回答

0

plt.legend開始用gca()(返回當前軸):

# from pyplot.py: 
def legend(*args, **kwargs): 
    ret = gca().legend(*args, **kwargs) 

所以調用plt.legend只會讓你在你的最後插曲的一個傳奇。但是也可以呼叫例如ax.legend(),或者您的情況爲subplots[0].legend()。將代碼添加到代碼的最後,會爲我提供兩個子圖的圖例。

樣品:

for subplot in subplots: 
    subplot.legend(loc='center left', bbox_to_anchor=(1, 0.5)) 
+1

大。謝謝,我給你的答案添加了一個示例代碼。 – max