如何在Matplotlib中调整图例标签位置实现短标签并列布局
实现自定义图例布局的解决方案
你的需求完全可以实现,下面提供两种可行的方法来调整图例布局,满足红色标签与蓝色标签并排、黑色长标签不换行的要求:
方法一:创建两个独立图例(推荐,布局更灵活)
通过拆分图例为两部分,分别控制短标签和长标签的位置与显示方式:
import numpy as np import matplotlib.pyplot as plt a = np.linspace(0,50,20) b = np.exp(-0.1*a)*70+np.random.random(20)*10 c = np.exp(-0.1*a)*70+np.random.random(20)*10 # 绘制线条并保存线条对象 line_blue, = plt.plot(a, b, 'b.-', lw=3, ms=10, label='short label') line_red, = plt.plot(a, c, 'r.-', lw=3, ms=10, label='short label') line_black, = plt.plot([a[3],a[3]], [-1,100], 'k--', lw=2, label='much longer label, I want to span two columns') plt.ylim([0, 80]) plt.xlim([0, 50]) # 第一个图例:放置蓝、红标签,设置为2列并排 legend_short = plt.legend([line_blue, line_red], [line_blue.get_label(), line_red.get_label()], loc='upper right', ncol=2, frameon=False) plt.gca().add_artist(legend_short) # 第二个图例:放置黑色长标签,禁用自动换行 plt.legend([line_black], [line_black.get_label()], loc='lower right', textprops={'wrap': False}) plt.show()
代码说明:
- 拆分图例为两部分,避免长标签干扰短标签的并排布局
ncol=2让蓝、红标签在同一行显示textprops={'wrap': False}强制黑色长标签保持单行不换行- 通过
loc参数分别设置两个图例的位置,避免重叠
方法二:调整单个图例的列布局
通过设置图例的列数和文本属性,让短标签并排,长标签自动跨列:
import numpy as np import matplotlib.pyplot as plt a = np.linspace(0,50,20) b = np.exp(-0.1*a)*70+np.random.random(20)*10 c = np.exp(-0.1*a)*70+np.random.random(20)*10 plt.plot(a,b,'b.-',lw=3,ms=10,label='short label') plt.plot(a,c,'r.-',lw=3,ms=10,label='short label') plt.plot([a[3],a[3]],[-1,100],'k--',lw=2,label='much longer label, I want to span two columns') plt.ylim([0,80]) plt.xlim([0,50]) # 设置图例为2列,禁用文本换行,调整间距优化布局 plt.legend(loc='best', ncol=2, textprops={'wrap': False}, columnspacing=1.2, handletextpad=0.6) plt.show()
代码说明:
ncol=2让前两个短标签在同一行显示,长标签自动占据两行的宽度textprops={'wrap': False}防止长标签被强制换行- 调整
columnspacing和handletextpad参数优化标签与图标之间的间距
内容的提问来源于stack exchange,提问作者Garf
相关产品推荐
相关产品推荐

