【发布时间】:2021-10-26 06:41:41
【问题描述】:
我想在一个元素的标签中引用另一个容器。我在下面附上了一些代码,而不是说“”,我更希望有一个代表“数据”的蓝色框。
import numpy as np
from matplotlib import pyplot as plt
data = np.arange(5)
fig, ax = plt.subplots()
bar_1 = ax.bar(np.arange(len(data)), data, align="center", label="data")
ax.hlines(data.mean(), 0, len(data), ls="--", label=f"mean of {bar_1}")
plt.legend()
plt.show()
【问题讨论】:
-
你的意思是你想做这样的事情?
from matplotlib.legend_handler import HandlerTuple;handler, label = ax.get_legend_handles_labels();plt.legend([(hl, bar_1), bar_1], [None,label[1]], handler_map={tuple: HandlerTuple(ndivide=None)}) -
@r-beginners 我不明白你的意思,你的代码给了我一个错误
AttributeError: 'NoneType' object has no attribute 'create_artists'。 @JohanC 是的,但我更喜欢蓝色框而不是名称。我在上面添加了一个示例。 -
@r-beginners 谢谢,我错过了
hl = ax.hlines。如第二张图片所示,我希望处理程序位于标签中,而不是更改平均值的处理程序。也许一个人不能混合标签和处理程序? -
据我所知,我从未见过处理程序和标签的混合。嗯,这只是我有限的经验,所以希望会有一些很好的答案。
-
图例的位置会变吗?我可以想出一个(有点愚蠢的)解决方法来让它在视觉上像你想要的那样。但正如我所说,这是一个非常愚蠢的解决方案,所以不要为它扔石头;)
标签: matplotlib legend