如何使用matplotlib从numpy列表中绘制许多数据集

时间:2016-12-12 20:10:30

标签: python arrays matplotlib

我是Python的新手,并且在使用matplotlib在一张图上绘制许多曲线时苦苦挣扎。

我有50个数据文件。我已将它们全部读入并存储在3D numpy列表中。第一维是文件号,第二维是时间,第三维是被测量的参数(时间,压力,......)。对于单个文件,数据可能如下所示:

(时间)(压力) 1 3.4 2 5.1 3 5.1 4 5.1 5 7.8

我想在一张图上绘制所有五十次与压力曲线的关系曲线。到目前为止我所拥有的是:

plt.plot(\
    clipData[0,:,0], clipData[0,:,1],\
    clipData[1,:,0], clipData[1,:,1],\
    clipData[2,:,0], clipData[2,:,1])
plt.show()

这对于前三条曲线工作正常,但我认为必须有一种方法可以手动生成列表到50.我想使用循环将列表构建为长字符串然后推这个字符串变成了plot()。

guts = 'clipData[0,:,0], clipData[0,:,1]'
plt.plot(guts)
plt.show

但我的简单测试表明我做错了。

任何帮助都会受到赞赏,我确信这是一种优雅的方式。

3 个答案:

答案 0 :(得分:1)

可能是这样的:

for i in range(50):
    plt.plot(clipData[i,:,0], clipData[i,:,1])
plt.show()

因为你使用的时候     guts = 'clipData[0,:,0], clipData[0,:,1]' guts只是一个无法绘制的字符串。

答案 1 :(得分:1)

您可以将两个2D数组传递给plot。第一个数组中的每一列将相对于第二个数组的相应列进行绘制。

plt.plot(clipData[:, :, 0].T, clipData[:, :, 1].T)

以这种方式绘图时,在指定线属性时,您会受到一些限制,特别是您无法为每一行传递标签。为了完全控制线性,在循环中绘图可能更方便。

答案 2 :(得分:0)

@Override
protected void onPostExecute(String s) {
  audText.setText(s);
}

这样,您的绘图例程将针对任何长度的clipData运行,或者如果您将来更改它。