我需要绘制一个数据条形图,其标签太长,不适合作为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()
谢谢!
答案 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()
答案 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)