如何使用 matplotlib 在 Python 中创建图例

Posted

技术标签:

【中文标题】如何使用 matplotlib 在 Python 中创建图例【英文标题】:How to create a legend in Python with matplotlib 【发布时间】:2021-12-13 04:30:34 【问题描述】:

我正在尝试使用不同的数据集复制以下图:

除了右上角的图例之外,我当前的情节有你看到的一切。我很难弄清楚我应该如何在我当前的代码中添加它:

fig = plt.figure()

plt.subplot(3, 1, 1)
plt.title('Task Switches and Avg Task Switches by Timestep', fontsize=10)
plt.ylabel('Task Switches', fontsize=9)
plt.xlim(-35, timestep_num + 35)
plt.xticks(np.arange(0, timestep_num+1, 50), fontsize=-1, color='white')
plt.yticks(np.arange(0, 61, 20), fontsize=6)
plt.plot([stepsum_list[i][6] for i in range(len(stepsum_list))], color='royalblue', 
linewidth=0.7, linestyle='', marker='.', markersize=1)
plt.plot([stepsum_list[i][6]/(i+1) for i in range(len(stepsum_list))], color='limegreen', 
linewidth=0.6,)

plt.subplot(3, 1, 2)
plt.title('Task Demand per Timestep by Task', fontsize=10)
plt.ylabel('Task Demand', fontsize=9)
plt.xlim(-35, timestep_num + 35)
plt.xticks(np.arange(0, timestep_num+1, 50), fontsize=-1, color='white')
plt.yticks(np.arange(0, 6, 1), fontsize=6)
plt.plot([stepdem_list[i][1] for i in range(len(stepdem_list))], color='darkorange', 
linewidth=0.7, linestyle='', marker='.', markersize=1)
plt.plot([stepdem_list[i][2] for i in range(len(stepdem_list))], color='yellowgreen', 
linewidth=0.7, linestyle='', marker='.', markersize=1)
plt.plot([stepdem_list[i][3] for i in range(len(stepdem_list))], color='purple', 
linewidth=0.7, linestyle='', marker='.', markersize=1)
plt.plot([stepdem_list[i][4] for i in range(len(stepdem_list))], color='blue', linewidth=0.7, 
linestyle='', marker='.', markersize=1)

plt.subplot(3, 1, 3)
plt.title('Target and Tracker Movement',fontsize=10)
plt.ylabel('Movement', fontsize=9)
plt.xlabel('Timesteps', fontsize=9)
plt.xlim(-35, timestep_num + 35)
plt.xticks(np.arange(0, timestep_num+1, 50), fontsize=8)
plt.yticks(np.arange(-10, 11, 10), fontsize=6)
plt.plot([stepsum_list[i][4] for i in range(len(stepsum_list))], color='blue', linewidth=.5)
plt.plot([stepsum_list[i][2] for i in range(len(stepsum_list))], color='red', linewidth=.5)

fig.align_labels()
plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=0.4, hspace=0.4)
plt.savefig('prog02_output.png')
plt.show

对于所有重复的代码,我深表歉意,我是 Python 的新手,这是我第一次制作情节,所以我还不知道所有的技巧。我找到了函数figlegend(),但我很困惑这是否是我想要使用的,如果是的话,参数是如何工作的。将图例放置在正确的位置(与顶部子图对齐)也是我正在尝试做的事情,但似乎无法弄清楚。

我不是要求任何人编写任何代码或重写我所拥有的。只是为了有人指出我正确的方向,无论是解释一个函数以及它可以采用哪些参数,还是我当前的代码中可能需要更改哪些内容才能使用figlegend()

【问题讨论】:

为了让人们尝试提供适用于您的示例的答案,如果您包含一些模拟数据来展示您获得的结果,将会很有帮助。 首先,您需要将label 关键字参数添加到您正在绘制的所有内容中。然后查看Axes.get_legend_handles_labels 【参考方案1】:

我在 Matplotlib 中绘制图例的方式是通过 Axes.legend() 函数,如下所示:

源码是

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot([0,1,2],[2,1,0], c='r', label='Plot 1')
ax.plot([0,1,2],[0,1,2], c='b', label='Plot 2')
ax.legend()
plt.show()

通过 label 关键字参数为绘图中的每个数据轨迹添加标签后,您可以使用

向图形添加图例
plt.gca().legend()

【讨论】:

以上是关于如何使用 matplotlib 在 Python 中创建图例的主要内容,如果未能解决你的问题,请参考以下文章

Python中使用matplotlib 如何绘制折线图?

如何在 matplotlib / Python 中更改后端

如何使用 matplotlib 在 python 中绘制 3D 密度图

如何使用matplotlib在python中绘制向量

如何使用 python/matplotlib 为 3d 绘图设置“相机位置”?

我如何(在 Python 中)通过使用 blitting 从绘图中删除 matplotlib 艺术家?