从 csv 文件读取数据以使用 matplotlib 绘制多个图

reading data from csv file to plot multiple plots using matplotlib

我有一组 csv 文件,如下所示:

tau,rh,temp,
00,100,23,
03,85,25,
06,98,26,
09,100,15,

现在我知道如何从 csv 文件中绘制图表了。我有以下脚本:

import matplotlib.pyplot as plt
import numpy as np
import csv
import sys

file=sys.argv[1]
fname = open(file,'rt')
plt.plotfile(fname, ('tau', 'rh', 'tmp'), subplots=False)
plt.show()

这似乎工作正常。但是,我希望能够将 tmp 绘图放在一组单独的 y 轴上而不是 rh。我知道何时在多个轴上绘制多个图,您必须执行以下操作:

t = np.arange(1, 25.0, 5)
s1 = [1,2,3,4,5]
ax1.plot(t, s1, 'b-')
ax1.set_xlabel('time (s)')
# Make the y-axis label, ticks and tick labels match the line color.
ax1.set_ylabel('rh', color='b')
ax1.tick_params('y', colors='b')

ax2 = ax1.twinx()
s2 = [1,2,4,9]
ax2.plot(t, s2, 'r.')
ax2.set_ylabel('tmp', color='r')
ax2.tick_params('y', colors='r')

你会得到两个地块。我想要做的是根据读取 csv 文件,在上面的示例中将 s1 设置为 rh 的 csv 值,并将 s2 设置为 tmp 的 csv 值。我该怎么做?

您的代码有几个问题。

我会使用 pandas 阅读 csv 只是为了练习。但它也应该这样工作。

绘图部分缺少 "fig, ax1 = plt.subplots()" 命令,第二部分具有 x 和 y 的不同长度数组(t 是 5 项,s2 是 4 项)

试试这个:

fig, ax1 = plt.subplots()
t = np.arange(1, 25.0, 5)
s1 = [1,2,3,4,5]
ax1.plot(t, s1, 'b-')
ax1.set_xlabel('time (s)')
# Make the y-axis label, ticks and tick labels match the line color.
ax1.set_ylabel('rh', color='b')
ax1.tick_params('y', colors='b')

ax2 = ax1.twinx()
s2 = [1,2,4,9,10]
ax2.plot(t, s2, 'r.')
ax2.set_ylabel('tmp', color='r')
ax2.tick_params('y', colors='r')

希望对您有所帮助!

您可以先将数据加载到数组中:

data = np.loadtxt(sys.argv[1], delimiter=',', skiprows=1, usecols=(0,1,2))
t = data[:,0]
s1 = data[:,1]
s2 = data[:,2]

然后继续绘制它。这假设您知道数据的列索引,而不仅仅是列名。不过,最好使用 pandas:

import pandas
d = pandas.read_csv(sys.argv[1])

然后绘制(d['tau'], d['rh']) 和绘制(d['tau'], d['temp'])您在代码的第二部分设置的轴代替 s1 和 s2。