我遇到的情况是,我已经在matplotlib图上绘制了内容,并且散点图形状映射到了标签类型。
例如:
's': "X"
'o': "Y"
但是,我用网络x作图。现在,我想添加一个显示此映射的图例,然后可以使用plt
方法修改该图。
所以我需要以某种方式plt.legend
:
plt.legend(('s','o'),("X","Y"))
但是从文档中尚不清楚如何完成此任务。有没有办法在matplotlib中绘制这样的自定义图例?
答案 0 :(得分:1)
从您的问题中不清楚映射的含义。如果您希望将图例手柄从默认标记修改为自定义变量标记,则可以执行以下操作。我的解决方案基于this答案,但简化为一个简单的案例。不要忘记赞成原始答案。我已经承认了。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
fig, ax = plt.subplots()
new_legends = ["X", "Y"]
markers = ['s', 'o']
colors = ['r', 'b']
x = np.arange(5)
plt.plot(x, 1.5*x, marker=markers[0], color=colors[0], label='squares')
plt.plot(x, x, marker=markers[1], color=colors[1], label='circles')
_, labels = ax.get_legend_handles_labels()
def dupe_legend(label, color):
line = Line2D([0], [0], linestyle='none', mfc='black',
mec=color, marker=r'$\mathregular{{{}}}$'.format(label))
return line
duplicates = [dupe_legend(leg, color) for leg, color in zip(new_legends, colors)]
ax.legend(duplicates, labels, numpoints=1, markerscale=2, fontsize=16)
plt.show()
答案 1 :(得分:0)
在Axis
对象上绘制内容时,可以传递label
关键字参数:
fig, ax = plt.subplots(figsize=(8, 8))
n_points = 10
x1 = np.random.rand(n_points)
y1 = np.random.rand(n_points)
x2 = np.random.rand(n_points)
y2 = np.random.rand(n_points)
ax.scatter(x1, y1, marker='x', label='X')
ax.scatter(x2, y2, marker='o', label='y')
ax.legend()
这会产生如下结果: