我有一个如下所示的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值。我该怎么做呢?
答案 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。