如何调整matplotlib图例每列行数实现自定义文本排布
实现方法
你可以通过手动重排图例句柄顺序+补充不可见的哑图例项实现自定义列行数,完整可运行代码如下:
import matplotlib.pyplot as plt import numpy as np for i in range(10): plt.plot(np.linspace(0, 5, 5), np.random.randint(0, 10, 5), label=str(i)) # 获取已有图例句柄和标签 handles, labels = plt.gca().get_legend_handles_labels() # 创建不可见的哑图例项,用于占位 dummy_handle = plt.Line2D([], [], visible=False) # 补充2个占位项,凑够3列*4行=12个条目 handles += [dummy_handle, dummy_handle] labels += ["", ""] # 重排句柄顺序,适配行优先填充规则,实现4/4/2的列分布 new_handles_order = [0,4,8, 1,5,9, 2,6,10, 3,7,11] handles = [handles[idx] for idx in new_handles_order] labels = [labels[idx] for idx in new_handles_order] # 生成图例 plt.legend(handles=handles, labels=labels, ncol=3, loc=1) plt.show()
原方法失效原因
你之前直接添加plt.plot([], [], label='')未生效是因为matplotlib图例默认按行优先规则填充条目,直接在末尾追加的空占位项会落到第二列末尾,无法让第三列出现空缺,手动重排句柄顺序可以精准控制每个条目的展示位置。
内容的提问来源于stack exchange,提问作者JQY
相关产品推荐
相关产品推荐

