在图例中使用代理艺术家,matplotlib,Python

2024-10-02 00:27:41 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我的代码片段:

fig2 = plt.figure(figsize=(8,6))
ax1 = fig2.add_subplot(111)
ax1.scatter((logngal),(logm200),c='r',label='$0.0<z<1.0$')
ax1.plot((logngal),(curve_y_1),'y',linewidth=2,label='$slope=%s \pm %s$'%(slope1,slope1_err))


ax1.fill_between(x_pred, lower, upper, color='#888888', alpha=0.5)
p1 = mpatches.Rectangle((0, 0), 1, 1, fc="#888888",alpha=0.5)
ax1.legend([p1],['$1\sigma\/confidence\/limts$'])

fig2.show()

当我执行上述操作时,我只看到图例中提到的$1\sigma\/confidence\/limts$

而正如你们所见,我也分别在ax1.scatter和{}中调用label='$0.0<z<1.0$'和{}。在

这不会在图例中绘制。在

如何在图例中添加上述三个标签?


Tags: 代码alphapltsigmalabelfigureconfidence图例
1条回答
网友
1楼 · 发布于 2024-10-02 00:27:41

您需要在绘图时抓取scatterplot艺术家,然后将它们的句柄和标签提供给legend。例如,下面是修改后的代码(在开始时有一些示例数据,只是为了让它运行):

plt.plot返回一个Line2D对象的列表,因此,如果将其读作pplot, = plt.plot(...),则将该单项列表解压缩。在

然后可以使用.get_label()on pplotpscat为图例添加标签。在

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

# Some things to make your script run when I don't have your data
slope1,slope1_err='this','that'
logngal   = np.linspace(0,1,20)
logm200   = np.random.rand(20)
x_pred    = np.linspace(0,1,20)
curve_y_1 = 0.5*(np.sin(logngal)/2.+np.cos(logngal))
upper     = np.sin(x_pred)/2.
lower     = np.cos(x_pred)
# end of sample data

fig2 = plt.figure(figsize=(8,6))
ax1 = fig2.add_subplot(111)

pscat  = ax1.scatter((logngal),(logm200), c='r',label='$0.0<z<1.0$')
pplot, = ax1.plot((logngal),(curve_y_1),'y',linewidth=2,label='$slope=%s \pm %s$'%(slope1,slope1_err))

ax1.fill_between(x_pred, lower, upper,color='#888888', alpha=0.5)

p1 = mpatches.Rectangle((0, 0), 1, 1, fc="#888888",alpha=0.5)

handles = [p1,pplot,pscat]
labels  = ['$1\sigma\/confidence\/limts$',pplot.get_label(),pscat.get_label()]

ax1.legend(handles,labels)

fig2.show()

enter image description here

相关问题 更多 >

    热门问题