Как прочитать текстовый файл и построить график с помощью matplotlib

#python #matplotlib

#python #matplotlib

Вопрос:

Я впервые использую python и matplotlib, и я хотел бы вывести данные из файла CSV.

Файл CSV имеет вид:

 10/03/2018 00:00,454.95,594.86
  

содержит около 4000 строк. Я хотел бы отобразить данные из второго столбца в сравнении с datetime для каждой строки и данные из третьего столбца в сравнении с datetime для каждой строки, оба на одном графике.

Пока это мой код, но он не работает:

 import matplotlib.pyplot as plt
import csv
import datetime
import re
T = []
X = []
Y = []
with open('Book2.csv','r') as csvfile:
    plots = csv.reader(csvfile, delimiter=',')
    for row in plots:

        datetime_format = '%d/%m/%Y %H:%M'
        date_time_data = datetime.datetime.strptime(row[0],datetime_format)
        T.append(date_time_data)
        X.append(float(row[1]))
        Y.append(float(row[2]))

        plt.plot(T,X, label='second column data vs datetime')
        plt.plot(T,Y, label='third column data vs datetime')

        plt.xlabel('DateTime')
        plt.ylabel('Data')
        plt.title('Interesting GraphnCheck it out')
        plt.legend()
        plt.show()
  

Любая помощь или руководство были бы замечательными. Большое спасибо! 🙂

Комментарии:

1. Какова ваша функция? не могу помочь вам без этого.

2. Извините, я, вероятно, должен был сделать это более понятным. Мне просто нужен простой график точек данных из второго и третьего столбцов в зависимости от даты и времени. Спасибо.

3. это файл .txt или csv?

4. Это CSV-файл

5. @Talal смотрите мой ответ, надеюсь, это поможет вам

Ответ №1:

Вы могли бы использовать pandas для чтения CSV-файла

 import pandas as pd

data = pd.read_csv('file_name.txt', header = None)

  

Оттуда вы можете использовать фрейм данных pandas в качестве входных данных для matplot. Хороший учебник можно найти здесь

Ответ №2:

Я надеюсь, что это поможет вам:

 import csv
import numpy as np


a = []
with open('table.csv') as f:  # Let's say your data is at 'table.csv'
    f_csv = csv.reader(f)
    for row in f_csv:
        a.append(row)  # Get each line

b = np.array(a)  # Make it as a numpy array
c = b[:,[1,2]]  # Filter it by column

print(c)
  

Ответ №3:

 import matplotlib.pyplot as plt
import csv

x = []
y = []

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

plt.plot(x,y, label='Loaded from file!')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Interesting GraphnCheck it out')
plt.legend()
plt.show()
  

не забудьте изменить имя файла в моем примере или указать правильный путь, если вы открываете файл из другого местоположения, если ваш файл имеет значение с плавающей запятой, измените x.append(int(row[0])) на x.append(float(row[0])) и то же самое для y

Комментарии:

1. Ваше преобразование в int завершится ошибкой row[0] , потому что это datetime, а не строка с плавающей точкой или числового типа

2. верно, я приводил только общий пример, поскольку он не привел подробностей, но если в файле есть данные, записанные так, как он показывает, это завершится неудачей

3. В вопросе говорится, что я хотел бы построить второй и третий столбцы , поэтому просто отредактируйте, и ваш ответ должен сработать

4. Привет, ребята, я попробовал предложенный вами код, но у меня не получилось. Я внес некоторые правки в свой оригинал и вопрос и опубликовал код. Смотрите выше.