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

时间:2017-01-23 20:51:37

标签: python csv matplotlib multiple-axes

我有一个如下所示的set 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和s2的csv值设置为上述示例中的tmp的csv值。我该怎么做呢?

2 个答案:

答案 0 :(得分:0)

您的代码有几个问题。

我会使用熊猫阅读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')
希望它有所帮助!

答案 1 :(得分:0)

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

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

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

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

然后绘制(d [' tau'],d [' rh'])和情节(d [' tau'],d [&# 39; temp'])在您设置的轴上代替代码的第二部分中的s1和s2。