【问题标题】:How can we append range on pyplot graphs from csv file?我们如何在 csv 文件中的 pyplot 图上附加范围?
【发布时间】:2020-08-24 20:58:57
【问题描述】:

我正在尝试从 csv 文件中绘制图表,其中 row[0] 是执行的开始时间,而 row[1] 是执行的结束时间。 row[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 不允许我这样做。我该如何解决这个问题?

【问题讨论】:

    标签: python pandas csv matplotlib


    【解决方案1】:

    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)
    

    【讨论】:

    • row[0] 是开始时间,row[1] 是结束时间。 row[6] 是信息量。您在程序中根本没有提到 row[1]?
    • @NagmatNazarov,抱歉我误解了最初的问题。我现在已经修改了。我仍然不能完全确定我理解你想要做什么,所以如果我遗漏了什么,请告诉我。
    【解决方案2】:

    感谢您的友好合作。 您可以在下面找到我的问题的答案:

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

    图表是:

    【讨论】:

      猜你喜欢
      • 2021-10-27
      • 1970-01-01
      • 2020-10-01
      • 2012-12-18
      • 1970-01-01
      • 2017-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多