2015-11-23 150 views
1

我通常使用方法「bar」中的參數'label'以下列方式爲條形制作標籤。matplotlib - 爲小提琴劇情製作標籤

axes[0].bar(x, y, bar_width, label='abc') 
axes[0].legend() 

現在,我想繪製小提琴的情節和製作標籤爲每個集合如下,但由於「violinplot」沒有參數「標籤」這是行不通的。

axes[0].violinplot(data1, label='abc1') 
axes[1].violinplot(data2, label='abc2') 

任何人都可以幫我做出每個集合的標籤嗎?

+0

http://matplotlib.org/users/legend_guide.html#proxy-legend-handles –

+0

@PaulH謝謝你的鏈接。現在我瞭解了一些關於傳說的內容。 – Han

回答

1

正如在評論中提到的,matplotlib中的一些圖不支持圖例。文檔仍然提供了一種簡單的方法來爲它們添加自定義圖例:http://matplotlib.org/users/legend_guide.html#proxy-legend-handles

主要想法:添加「假」對象,它可以不顯示在圖中,然後用它來形成圖例方法的手柄列表。

import random 
    import numpy as np 
    import matplotlib.pyplot as pl 
    import matplotlib.patches as mpatches 
    from itertools import repeat 

    red_patch = mpatches.Patch(color='red') 
    # 'fake' invisible object 

    pos = [1, 2, 4, 5, 7, 8] 
    label = ['plot 1','plot2','ghi','jkl','mno','pqr'] 
    data = [np.random.normal(size=100) for i in pos] 

    fake_handles = repeat(red_patch, len(pos)) 

    pl.figure() 
    ax = pl.subplot(111) 
    pl.violinplot(data, pos, vert=False) 
    ax.legend(fake_handles, label) 
    pl.show() 

violinplot with custom legend

+0

謝謝你的協助。按照您的說法,我添加了假手柄,看起來效果不錯。順便說一句,在方法「修補程序」中的參數「標籤」在你的代碼中做什麼?在我看來,沒有什麼變化取決於價值。 – Han

+0

@HanulLee,我修好了(通過刪除)。它在'legend'方法調用中被覆蓋,這就是爲什麼它沒有改變。 – merletta

+0

謝謝! @merletta – Han

2

編輯:對不起,我現在看到你想添加一個傳說,不軸標籤...

您可以手動設置刻度位置,然後覆蓋其標籤:

import numpy as np 
import matplotlib.pyplot as pl 

pos = [1, 2, 4, 5, 7, 8] 
label = ['abc','def','ghi','jkl','mno','pqr'] 
data = [np.random.normal(size=100) for i in pos] 

pl.figure() 
ax = pl.subplot(111) 
pl.violinplot(data, pos, vert=False) 
ax.set_yticks(pos) 
ax.set_yticklabels(label) 

enter image description here

+0

謝謝你的好意。正如你已經提到的,我一直在尋找添加圖例的方式。再次感謝。 – Han