带有没有颜色的图例的条形图

时间:2014-06-18 05:39:11

标签: python matplotlib

我需要绘制一个数据条形图,其标签太长,不适合作为x轴上的刻度。我希望在图例中包含标签,但无法弄清楚从图例中删除颜色(包括颜色会使图例混乱)。以下是一些示例代码:

import matplotlib.pyplot as plt

data_dic={1:'1:Text 1',2:'2:Text 2',3:'3:Text 3',4:'4:Text 4'}
ax1 = plt.subplot(111)
xval = [1,2,3,4]
yval = [ 22.,  13.,  21.,   6.]
for j in range(len(xval)):
    ax1.bar(xval[j], yval[j], width=0.8, bottom=0.0, align='center', color='k', label=data_dic[xval[j]])
ax1.set_xticks(xval)
ax1.legend()
plt.show()

enter image description here

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以通过制作没有标记或线条的图表并将标签与该图表相关联来创建不显示颜色或任何标记的图例。以下是您的示例:

import matplotlib.pyplot as plt

data_dic={1:'1:Text 1',2:'2:Text 2',3:'3:Text 3',4:'4:Text 4'}
ax1 = plt.subplot(111)
xval = [1,2,3,4]
yval = [ 22.,  13.,  21.,   6.]
for j in range(len(xval)):
    ax1.bar(xval[j], yval[j], width=0.8, bottom=0.0, align='center', color='k')
    ax1.plot(1,1,label = data_dic[xval[j]],marker = '',ls ='') #plot with not marker or line
ax1.set_xticks(xval)
ax1.legend(frameon = False)
plt.show()

legend with no markers

您也可以使用text代替legend,因为您不需要与标记相关联的文字。

答案 1 :(得分:0)

设置handlength=0可让您关闭。但有一个技巧是,即使这样绘制边缘,也需要为标记设置透明边缘颜色。同时调整handletextpad以使文本在图例框中居中。例如,用以下内容替换您的图例行:

H, L = ax1.get_legend_handles_labels()
p = Rectangle((0, 0), 1, 1, fc='r', ec=(1, 0, 0, 0))
ax1.legend([p]*4, L, handlelength=0, handletextpad=0)

enter image description here