如何在Python 2中创建20个CSV文件的叠加图?

问题描述 投票:0回答:1

我在python 2中为每个长计算生成20个CSV文件。从每个文件中的所有数据集中,有2个集合在这里很重要。首先设置为x轴上的行[0],第三个设置为y轴上的行[2]。第一个集合,(row [0])总是相同的,所以一个条目应该足够了,但是第三个集合(row [2])由文件改变,需要根据我的需要绘制(row [0])从所有叠加的文件中绘制所有第三组。

我不是程序员,但我可以按照以下方式单独绘制它们:

import matplotlib.pyplot as plt
import csv

x = []
y = []

with open('energy.csv','r') as csvfile:
    plots = csv.reader(csvfile, delimiter=',')
    for row in plots:
        x.append(row[0])
        y.append(row[2])

plt.plot(x,y, label='Energies')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Energy Graph\n per particle')
plt.legend()
plt.savefig('energy.png')
plt.savefig('energy.pdf')

plt.show()

但是要叠加所有数据集,我想尝试“for file_name in files:”将数据集附加到文件名作为变量,并将它们全部绘制在一个图形的末尾:

for dirpath, dirnames, files in os.walk('.'):
    for file_name in files:
            if file_name.endswith('.csv'):
                    print(file_name)
                    with open(file_name,'r') as csvfile:
                            plots = csv.reader(csvfile, delimiter=',')
                            for row in plots:
                                    x.append(row[0])
                                    file_name.append(row[2])
            plt.plot(x,file_name, label='Loaded from file!')
            plt.xlabel('x')
            plt.ylabel('y')
            plt.title('Energy')
            plt.legend()
            plt.savefig('1.png')
            plt.savefig('1.pdf')

            plt.show()

然后我收到这个错误:

file_name.append(row [1])AttributeError:'str'对象没有属性'append'

任何帮助,将不胜感激

python csv matplotlib plot overlay
1个回答
0
投票

要创建叠加图,请迭代调用plt.plot()


for dirpath, dirnames, files in os.walk('.'):
    for file_name in files:
        if file_name.endswith('.csv'):
            print(file_name)
            x = []
            y = []
            with open(file_name,'r') as csvfile:
                plots = csv.reader(csvfile, delimiter=',')
                for row in plots:
                    x.append(row[0])
                    y.append(row[2])
            plt.plot(x,y, label=file_name)

plt.xlabel('x')
plt.ylabel('y')
plt.title('Energy')
plt.legend()
plt.show()

例: a.csv

1,3,4,3,5
3,2,5,2,5

b.csv

1,3,2,3,5
3,2,6,2,5

然后你会得到这个情节:

plot example

但如果CSV文件由数字数据组成,我推荐使用NumPy,因为它很快。 :

import os
import numpy as np
import matplotlib.pyplot as plt

for dirpath, dirnames, files in os.walk('.'):
    for file_name in files:
        if file_name.endswith('.csv'):
            print(file_name)
            data = np.loadtxt(file_name, delimiter=',').transpose()
            plt.plot(data[0], data[2], label=file_name)
plt.xlabel('x')
plt.ylabel('y')
plt.title('Energy')
plt.legend()
plt.show()

© www.soinside.com 2019 - 2024. All rights reserved.