Как мы можем добавить диапазон на графики pyplot из файла csv? - PullRequest
1 голос
/ 09 мая 2020

Я пытаюсь построить график из файла csv, где строка [0] - время начала выполнения, а строка [1] - время окончания выполнения. строка [6] - это количество переданных данных.

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import pickle
import csv

np.random.seed(0)
x=[]
y=[]
with open('graph.csv','r') as csvfile :
    plots = csv.reader(csvfile, delimiter=',')
    for row in plots :
        x.append(row[0])
        y.append(row[6])

plt.plot(x,y,marker='o')
plt.title("Input/Output graph of Virtual file system layer and ext4 layer read and writes.")
plt.xlabel("time(ms)")
plt.ylabel("bytes")
plt.show()

Я хотел бы написать x.append(row[0]:row[1]), чтобы показать диапазон, но python не позволяет мне это сделать. Как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 11 мая 2020

Спасибо за любезное сотрудничество. Ниже вы можете найти ответ на мой вопрос:

import matplotlib.pyplot as plt
import csv

with open('graph.csv','r') as csvfile :
    rows = list(csv.reader(csvfile, delimiter=','))[1:]
    rows.sort(key = lambda x: int(x[6])) 
    for row in rows:
        start, end, data = int(row[0]), int(row[1]), int(row[6])
        x = [start, end]
        y = [data, data]
        plt.plot(x, y, color = 'b', marker='o')
plt.xlabel('time(milliseconds)')
plt.ylabel('Amount of Data(bytes)')
plt.title('VFS layer Read only graph')
plt.grid(True)
plt.savefig('VR.png')
plt.show()

А график: Virtual file system layer input/output graph

0 голосов
/ 09 мая 2020

Выполнение чего-то вроде var:var2 недопустимый синтаксис в контексте, в котором вы его используете. Если вы пытаетесь сгруппировать пару точек данных для каждого элемента в списке, вы можете использовать тип кортежа для каждой записи и сделать что-то вроде этого:

events = []

# Run this in your loop:
events.append((row[0], row[1]))

Однако на самом деле это может быть тем не менее, хороший вариант использования типа `namedtuple`] 1 . Именованные кортежи позволяют быстро и легко создать объект, который использует именованные атрибуты, но при этом ведет себя как кортеж.

Вот пример того, как вы могли бы его использовать:

from collections import namedtuple
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import pickle
import csv

np.random.seed(0)
Event = namedtuple('Event', ['start', 'end', 'transferred'])
events = []

# Assigning the points to a list
with open('graph.csv','r') as csvfile :
    plots = csv.reader(csvfile, delimiter=',')
        for row in plots:
            # You can optionally omit the keywords if you use the same order
            # as defined in the namedtuple initially.
            new_event = Event(start=row[0], end=row[1], transferred=row[6])
            events.append(new_event)

# Accessing the stored events later
for event in events:
    print("({}-{} ({} transferred)").format(event.start, event.end, event.transferred)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...