Как создать оверлейные графики из 20 CSV-файлов в Python 2? - PullRequest
0 голосов
/ 14 марта 2019

Я генерирую 20 CSV-файлов на каждый длинный расчет, который я делаю в Python 2. Из всех наборов данных в каждом файле есть 2 набора, которые важны здесь.Первый набор, как строка [0] на оси х, а третий набор как ряд [2] на оси у.Первый набор (строка [0]) всегда один и тот же, поэтому достаточно одной записи, но третий набор (строка [2]) изменяется файлом и должен быть нанесен на график (строка [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()

Но для наложения всех наборов данных, которые я хотел попробовать "для file_name в файлах: «добавить набор данных к имени файла в качестве переменной и отобразить их все в конце на одном графике:

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'

Любая помощь будет оценена

1 Ответ

0 голосов
/ 14 марта 2019

Чтобы создать оверлейные графики, вызовите 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()

...