如何在matplotlib图例描述中引用其他容器,显示对应标记而非对象字符串
解决方案
要实现图例中同时显示柱状图标记和水平线标记的效果,需要手动自定义图例的handles(绘图对象引用)和渲染规则,具体实现代码如下:
import numpy as np from matplotlib import pyplot as plt from matplotlib.legend_handler import HandlerTuple data = np.arange(5) fig, ax = plt.subplots() bar_1 = ax.bar(np.arange(len(data)), data, align="center", label="data") hline = ax.hlines(data.mean(), 0, len(data), ls="--") # 自定义图例的绘图对象和对应标签 handles = [ bar_1, # 第一个图例项:原柱状图 (bar_1[0], hline) # 第二个图例项:组合柱状图标记 + 水平线标记 ] labels = ["data", "mean of data"] # 传入自定义配置,HandlerTuple用于处理组合式的图例标记 ax.legend( handles=handles, labels=labels, handler_map={tuple: HandlerTuple(ndivide=None, pad=0.1)} ) plt.show()
关键逻辑说明
bar_1[0]是柱状图容器中的第一个矩形元素,用来代表蓝色柱状图的标记HandlerTuple支持将多个绘图对象组合在同一个图例条目中横向排列,ndivide=None表示不对标记空间做分割,pad参数可以调整两个标记之间的间距- 手动构造的
handles和labels列表顺序要一一对应,即可完全控制图例的显示内容
内容的提问来源于stack exchange,提问作者HennyKo
相关产品推荐
相关产品推荐

