如何在图例描述中引用其他容器?

Posted

技术标签:

【中文标题】如何在图例描述中引用其他容器?【英文标题】:How to reference other containers in legend description? 【发布时间】: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。如第二张图片所示,我希望处理程序位于标签中,而不是更改平均值的处理程序。也许一个人不能混合标签和处理程序? 据我所知,我从未见过处理程序和标签的混合。嗯,这只是我有限的经验,所以希望会有一些很好的答案。 图例的位置会变吗?我可以想出一个(有点愚蠢的)解决方法来让它在视觉上像你想要的那样。但正如我所说,这是一个非常愚蠢的解决方案,所以不要为它扔石头;) 【参考方案1】:

这是一种愚蠢的方法:

import matplotlib.patches as mpatches
import matplotlib.lines as mlines
import numpy as np
from matplotlib import pyplot as plt

data = np.arange(5)
plt.close()
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")
ax1 = fig.add_subplot(221)
ax1.set_xlim(0, 1)
ax1.set_ylim(0, 1)
ax1.axis('off')

blue_patch = mpatches.Patch(label='data')
blue_dline = mlines.Line2D([], [], marker='', linestyle='--', label='mean of               ')
nothing = mlines.Line2D([], [], marker='', linestyle='', label='')

ax2 = ax1.twinx()
ax2.axis('off')
ax1.legend(handles=[blue_dline, blue_patch], loc=(0.02, 0.7))
ax2.legend(handles=[blue_patch, nothing], framealpha=0, loc=(0.465, 0.7), handletextpad=0.2)

plt.show()

输出:

只要它有效,谁在乎它是否愚蠢;)

【讨论】:

丹克卡琳娜,这对我有用。用图例制作子图是个好主意。这不必很好或性能代码,我只需要一些漂亮的情节;) Bitte :) 我认为也可以通过使用注释使其成为性能代码。但由于我不习惯,所以需要更多时间。

以上是关于如何在图例描述中引用其他容器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 matplotlib 中更改图例字体名称

如何在 HTML 的图例中指定不同的形状?

如何在 Google Charts 动画中阻止图例消失?

如何在ggplot2的图例中斜体化一个类别

如何使用自己想要的颜色让图例出现在我的情节中? [复制]

我们如何根据颜色标记散点图的图例