有没有办法在Matplotlib中为Legend添加一个空条目?

时间:2015-01-21 23:31:53

标签: python graph matplotlib legend

我想在python的matplotib图中为图例添加一个空格。我在图例中有奇数条目,目前看起来像:

 _________________________________________________________________
|  handle1  -  label1   handle3  -  label3   handle5  -  label5  |
|  handle2  -  label2   handle4  -  label4                       |

但是,数据在逻辑上与控件成对分组,所以如果它看起来像这样会更好:

 _________________________________________________________________
|  handle1  -  label1   handle2  -  label2   handle4  -  label4  |
|                       handle3  -  label3   handle5  -  label5  |

在自动运行数据集上的for循环期间生成图例:

for [folder1,folder2, label] in folder_list:
    parse_folder([folder1,folder2])
    color = next(colorgen)
    marker = next(markergen)
    ax1.errorbar(percent[0],percent[1], yerr=per_std, c=color, fmt=marker, label=label)
    if label == 'Flat Plate':
        print 'tripped'
        ax1.plot(np.NaN, np.NaN, '-', color='none', label=' ')

然后在结束时打电话

leg = ax1.legend(loc='lower left',fancybox=True,prop={'size':fontsize-2},ncol=4,bbox_to_anchor=(-0.1, -0.315))

有没有办法将这个空白点插入图例?

2 个答案:

答案 0 :(得分:3)

您可以定义假白线

l = Line2D([0],[0],color="w")

然后绘制数据并将线/标记保存在变量

f = figure()
ax = f.add_subplot(111)

l1, = ax.plot(1*arange(10))
l2, = ax.plot(2*arange(10))
l3, = ax.plot(3*arange(10))
l4, = ax.plot(4*arange(10))
l5, = ax.plot(5*arange(10))

最后,您按以下方式致电legend

ax.legend((l1,l,l2,l3,l4,l5),("label1","","label2","label3","label4","label5"),
           loc='upper center',fancybox=True,ncol=3)

其中每行/标记与不同的标签相关联。在您希望在图例中有间隙的位置插入伪造的白线l并将空白字符串与其关联。

希望它有所帮助。enter image description here

答案 1 :(得分:3)

Farenorth的解决方案(在对Op的评论中给出)给出了最清晰的答案。

在需要空白位置的位置添加其他命令,使用np.NaN获取数据并将颜色设置为none

ax1.plot(np.NaN, np.NaN, '-', color='none', label='')

请注意,这必须是相同的类型,因为用于自动生成Legend的方法会顺序获取不同的绘图类型,即所有绘图,然后是所有错误栏等,因此空白条目需要与保持按功能调用的顺序。