【问题标题】:Python plot data from csv and sort them in plotPython 绘制来自 csv 的数据并在图中对它们进行排序
【发布时间】:2020-12-19 00:58:31
【问题描述】:

我需要从 csv 文件中绘制数据。 yvalues 不是按顺序排列的,这就是我需要对它们进行排序的原因。我旋转 x 轴,因为字符串很长。可以吗?

####My data:####

####Code:#####
x = []
y = []

with open('output.csv','r') as csvfile:
    plots = csv.reader(csvfile, delimiter=',')

    
    for row in plots:
        x.append(row[1])
        y.append(row[2])
        
plt.plot(x[1:],y[1:], label='Loaded from file!')
plt.xlabel('x')
plt.xticks(rotation=90)
plt.ylabel('y')
plt.title('Interesting Graph\nCheck it out')
plt.legend()

plt.gcf().autofmt_xdate()

plt.show()

【问题讨论】:

  • 您应该将xy 放在一个列表中data = [ [x1, y1], [x2, y2], ... ] - 这样您就可以阅读data = list(plots) - 然后您可以使用data.sort(key=lambda i:i[1])sorted(data, key=lambda i:i[1])。之后,您应该将其拆分为单独的列表。或阅读pandas.DataFrame

标签: python python-3.x pandas matplotlib


【解决方案1】:

编辑:

似乎问题比我预期的要简单,解决方案是

y[1:] = sorted(y[1:])

旧答案

您应该将 xy 成对保留在一个列表中 - 像这样

data = [ [x1, y1], [x2, y2], ... ]

所以你可以把它读成

data = list(plots)

然后你就可以排序了

data.sort(key=lambda i:i[2])

data = sorted(data, key=lambda i:i[2])

然后你应该拆分数据

x = [i[1] for i in data]
y = [i[2] for i in data]

或者你应该把它读给pandas.DataFrame

import pandas as pd

data = pd.read_csv('output.csv')

然后你就可以排序了

data = data.sort_values(by='TotalTime')

并在不分割的情况下绘制它

plt.plot(data['Name'], data['TotalTime']

【讨论】:

  • 名称位置不应在绘图中更改,因为当我使用上面写的内容时,它也在对名称进行排序。姓名位置应按相同顺序排列,但总时间值应按顺序排列,我分享了一张图表照片
  • 通常人们对所有列中的所有值进行排序。那你只需要y[1:] = sorted(y[1:]) 就是这么简单的解决方案,没想到你的问题这么简单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-28
  • 1970-01-01
  • 2020-07-20
  • 2020-10-17
  • 1970-01-01
相关资源
最近更新 更多