【问题标题】:create overlay plots from multiple CSV files in Python在 Python 中从多个 CSV 文件创建叠加图
【发布时间】:2013-06-19 22:37:12
【问题描述】:

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

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

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

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

我已经能够打开单个 CSV 文件并绘制 X 与 Y,但没有成功迭代文件并在单个绘图上覆盖多行。

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

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:无法将字符串转换为浮点数:Python/CSV\20135140.csv


只是为了检查,我进入了我的 csv 文件并删除了标题,认为它们可能是导致“字符串浮动”错误的原因。但是,即使我的 csv 中只有数字,它也会引发相同的错误。

【问题讨论】:

  • 请显示您使用的代码并解释它不工作的原因。
  • 如果您向我们展示您在做什么,您将在这里获得更好的帮助。由于您现在的问题是“请为我做我的工作”,这往往会惹恼可能会帮助您的人;)
  • 当您尝试覆盖多行时,什么不起作用?
  • 感谢您的 cmets - 用我尝试过的一种方法的代码更新了帖子(尝试了很多)。

标签: python matplotlib


【解决方案1】:

看起来它不起作用,因为您正在为每个循环创建一个新图形。

试试这个:

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()

【讨论】:

  • 谢谢@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: ax.plot(ferms[0], ferms[ 3],'k--') plt.xlabel('EFT(h)') plt.ylabel('pH') plt.show() 错误:ValueError:无法将字符串转换为浮点数:Python/ CSV\20135140.csv
  • @biltron 我无法阅读评论中的所有代码。所以我的下一个观察是你从来没有真正制作过数据框。我编辑了我的回复以帮助你更多。
  • 感谢数据框提示。但是,我仍然收到“无法将字符串转换为浮点数”的错误。
  • 如果没有一些数据,我们真的无法为您提供帮助。你能发一些吗?具体来说,发布引发该错误的文件。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 2021-09-17
    • 2011-02-06
    • 2020-04-04
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    相关资源
    最近更新 更多