首页 > 解决方案 > 使用列表理解绘制单独的数字

问题描述

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

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

当前输出如下所示:

电流输出

标签: listmatplotlibplotlist-comprehensionfigure

解决方案


正如 Matplotlib使用指南中所解释的,其plt.plot工作方式与ax.plot绘图方法相同:

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

因此,当您运行作为示例给出的列表推导时,循环plt.plot中的第一个方法调用会创建一个包含子 Axes 对象的新图形对象。然后,如 Matplotlib Pyplot 教程中关于使用多个图形和轴的部分所述:for

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 的建议,但它确实在满足单行要求的同时使代码更具可读性。


推荐阅读