2015-11-23 74 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