2017-01-23 44 views
0

绘制多条曲线我有一组csv文件看起来像这样:读取数据使用matplotlib

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值。我如何去做这件事?

回答

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 [ '温度'] )在代码的第二部分设置的轴上代替s1和s2。

0

你的代码有几个问题。

我会用熊猫阅读csv只是为了好的做法。但它也以这种方式工作。

的绘制部分缺少 “无花果,AX1 = plt.subplots()” 命令,并且所述第二部分具有用于x和y不同lenght阵列(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') 

希望它有帮助!