【问题标题】:How to add a legend entry without a symbol/color into an existing legend?如何将没有符号/颜色的图例条目添加到现有图例中?
【发布时间】:2018-03-26 12:52:08
【问题描述】:

我有一个带有传奇的情节。我想在图例框中添加一个条目。该条目可以是拟合参数或其他描述数据的内容。

例如,可以使用下面的代码

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 2*np.pi, 101)
y = np.sin(x)

plt.plot(x, y, color='r', label='y = sin(x)')
plt.plot(np.NaN, np.NaN, color='k', label='extra label')
plt.plot(np.NaN, np.NaN, color='b', linestyle=None, label='linestyle = None')
plt.plot(np.NaN, np.NaN, color='orange', marker=None, label='marker = None')
plt.plot(np.NaN, np.NaN, color=None, label='color = None')
plt.legend()
plt.show()

生成下面的图

我想要一个标签"extra label",只有空格,没有符号。我尝试将linestylemarkercolor kwargs 更改为None,但没有成功。我也尝试过绘制plt.plot([], []) 而不是绘制plt.plot(np.NaN, np.NaN)。我想一些hacky解决方法是将color='k'更改为color='white'。但我希望有更合适的方法来做到这一点。我该怎么做?

编辑

我的问题不是重复的。被指控复制的帖子显示了另一种制作传奇标签的方式,但不适用于没有符号的人。可以运行下面的代码来测试我的原始问题中的相同问题是否适用。

import matplotlib.patches as mpatches
nan_patch = mpatches.Patch(color=None, label='The label for no data')

并从plt.legend()修改此实例

plt.legend(handles=[nan_patch])

【问题讨论】:

  • 另见this answer
  • color=None 更改为color="None"
  • @ImportanceOfBeingErnest 你能解释一下为什么这仍然被标记为重复吗?
  • @DavidG 你能解释一下为什么这仍然被标记为重复吗?

标签: python python-3.x matplotlib plot legend


【解决方案1】:

您可以将项目添加到图例中,如(现已删除)副本所示。请注意,要使图例本身没有颜色,您必须设置color="none",例如

empty_patch = mpatches.Patch(color='none', label='Extra label') 
plt.legend(handles=[empty_patch])

为了拥有这个以及您现有的图例条目,您可以获取现有图例句柄和标签的列表,将额外的添加到其中,然后绘制图例:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches

x = np.linspace(0, 2*np.pi, 101)
y = np.sin(x)
plt.plot(x, y, color='r', label='y = sin(x)')

handles, labels = plt.gca().get_legend_handles_labels() # get existing handles and labels
empty_patch = mpatches.Patch(color='none', label='Extra label') # create a patch with no color

handles.append(empty_patch)  # add new patches and labels to list
labels.append("Extra label")

plt.legend(handles, labels) # apply new handles and labels to plot

plt.show()

这给出了:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    • 2019-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多