使用列表理解绘制单独的图形

问题描述

我当前的代码为列表中的每个元素生成重叠的数字test。如何使用列表理解生成两个单独的数字? (最好只使用一行代码)。

test=[[1,2,3,4],[5,6,7,8]]
[plt.plot(test[k]) for k in range(0,2)]

当前输出如下所示:

Current output

解决方法

如 Matplotlib Usage Guide 中所述,plt.plot 的工作方式与 ax.plot 绘图方法相同:

对于每个 Axes 绘图方法,matplotlib.pyplot 模块中有一个相应的函数,它在“当前”轴上执行该绘图,如果这些轴(及其父图形)尚不存在,则创建它们。>

因此,当您运行作为示例的列表推导式时,plt.plot 循环中的第一个 for 方法调用会创建一个包含子 Axes 对象的新 figure 对象。然后,如 working with multiple figures and axes 上的 Matplotlib Pyplot 教程部分所述:

MATLAB 和 pyplot 具有当前图窗和当前坐标区的概念。所有绘图函数都适用于当前坐标区。

这就是为什么循环中的所有后续 plt.plot 调用都被绘制在同一个图中。要在单独的图形中绘制线条,必须为每个 plt.plot 调用创建一个新图形,如下所示:

test = [[1,2,3,4],[5,6,7,8]]
for k in range(len(test)): plt.figure(),plt.plot(test[k])

编辑:根据 JohanC 的评论(关于问题),用单行复合语句替换了列表理解。尽管这与 PEP 8 recommendations 不符,但它确实在满足单行要求的同时使代码更具可读性。