如何使用 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 中创建图例的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 matplotlib 在 python 中绘制 3D 密度图