Matplotlib中如何在绘图后放大图例的标记(补丁)?
Matplotlib中如何在绘图后放大图例的标记(补丁)?
这个问题我之前踩过坑!你遇到的情况是因为散点图的图例标记并没有被归类到get_patches()或者get_lines()返回的集合里,而是藏在图例的**legendHandles(图例句柄)**中,所以调用那两个方法才会得到空列表。
要同时放大图例的文字和标记,我们可以修改你的函数,加上对legendHandles的处理:
import matplotlib.pyplot as plt def enlarge_legend(ax, fontSize=25, markerSize=150): # 调整图例文字大小(保留你原来的逻辑) for text in ax.get_legend().get_texts(): text.set_fontsize(fontSize) # 调整图例标记大小 legend = ax.get_legend() for handle in legend.legendHandles: # 散点图的标记是PathCollection类型,用set_sizes设置大小 if hasattr(handle, 'set_sizes'): handle.set_sizes([markerSize]) # 如果是折线图的线条标记,可以用set_linewidth调整粗细 elif hasattr(handle, 'set_linewidth'): handle.set_linewidth(3) # 测试代码 fig, ax = plt.subplots() ax.scatter([1,2,3], [2,3,1], label="auto") ax.legend() enlarge_legend(ax) plt.show()
解释一下关键逻辑:
legendHandles包含了图例中所有用于展示的元素,散点图对应的是PathCollection对象,我们可以通过set_sizes()方法直接调整它的标记大小;- 加上
hasattr的判断是为了兼容不同类型的图例元素(比如折线图的线条),让函数更通用; - 你可以根据需求调整
markerSize参数,数值越大标记就越大。
这样修改后,图例里的文字和圆圈标记就都会被放大啦!
内容来源于stack exchange
相关产品推荐
相关产品推荐

