在Python中创建来自多个CSV文件的叠加图

时间:2013-06-19 22:37:12

标签: python matplotlib

Python新手,一般编程并尝试:

1)从文件夹中读取多个(格式相同的)CSV文件

2)在单个图上的每个CSV文件中绘制列X'时间'与列Y'pH'

3)使用文件名(不带.csv)创建图例作为图表每一行的参考。

我已经能够打开一个CSV文件并绘制X与Y的关系,但是没有成功迭代文件并在一个图上叠加多行。

任何帮助将不胜感激!我已经尝试了几种不同的方式来读取文件,我只是在下面展示其中一种。我宁愿在文件中读取单独的pandas数据表,以便我可以稍后进行maniupulate。现在,我希望只是让一些基本代码工作。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pandas import Series, DataFrame
from numpy import nan as NA
import glob

ferms = glob.glob ('Python/CSV/*.csv')
print ferms

for ferm in ferms:
    fig = plt.figure()
    ax = fig.add_subplot(1,1,1)
    ax.plot(ferms['EFT(h)'], ferms['pH1.PV [pH]'], 'k--')
    plt.xlabel('EFT(h)')
    plt.ylabel('pH')
    plt.show()

基于@Paul H建议的修订代码


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pandas import Series, DataFrame
from numpy import nan as NA
import glob

ferms = glob.glob ('Python/CSV/*.csv')
print ferms
fig = plt.figure()
ax = fig.add_subplot(1,1,1)

for ferm in ferms:
# define the dataframe
    data = pd.read_csv(ferm)    
    ax.plot(ferms[0], ferms[3], 'k--')

plt.xlabel('EFT(h)')
plt.ylabel('pH')
plt.show()

新错误:

- > 235返回数组(a,dtype,copy = False,order = order)     236     237 def asanyarray(a,dtype = None,order = None):

ValueError:无法将字符串转换为float:Python / CSV \ 20135140.csv


只是为了检查,我进入了我的csv文件并删除了标题,认为它们可能是'string to float'错误的原因。但是,即使我的csvs中只有数字,它也会引发同样的错误。

2 个答案:

答案 0 :(得分:0)

看起来它不起作用,因为你正在为每个循环创建一个新的数字。

试试这个:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pandas import Series, DataFrame
from numpy import nan as NA
import glob

ferms = glob.glob ('Python/CSV/*.csv')
print ferms
fig = plt.figure()
ax = fig.add_subplot(1,1,1)

for ferm in ferms:
    # define the dataframe
    data = pd.read_csv(ferm)
    ax.plot(data['EFT(h)'], data['pH1.PV [pH]'], 'k--')

plt.xlabel('EFT(h)')
plt.ylabel('pH')
plt.show()

答案 1 :(得分:0)

我尝试从任意数量的文件中绘制数据时遇到了类似的问题。这是我的帖子Traceback lines on plot of multiple files的链接。基本上,您希望绘制每个文件中的数据,但不要在遍历每个文件的循环中包含plt.show()。 plt.show()应该在循环之外。