我使用下面的代码制作简单的日期和一个数据图。现在我想在一张图上绘制两条数据。
数据 (m / d / y,data0,data1)
6/28/13,256,503
6/29/13,74,274
6/30/13,62,376
7/1/13,159,222
7/2/13,105,173
我已经尝试修改此代码以读取额外的浮点数,但我只是不太了解语法并且它返回错误。我也搜索过SOF,找不到有帮助的例子。
import csv
import datetime as dt
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
arch = 'myfile.csv'
data = csv.reader(open(arch))
data = [(dt.datetime.strptime(item, "%m/%d/%y"), float(value)) for item, value in data]
data.sort()
[x, y] = zip(*data)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x, y, color='blue')
ax.grid(True)
fig.autofmt_xdate()
plt.title('posts')
plt.xlabel('Date Range 28.06.2013 to 28.03.2014')
plt.ylabel('y')
fig.set_facecolor('white')
plt.show()
有了日期和一条数据,我得到了可爱的结果
有人可以修改此代码,以便根据日期绘制2x数据吗?
答案 0 :(得分:2)
进行这些更改,你会很高兴:
data = [(dt.datetime.strptime(item, "%b/%d/%y"), float(v1), float(v2)) for (item, v1, v2) in data]
data.sort()
[x, y, z] = zip(*data)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x, y, color='blue')
ax.plot(x, z, color='red')
基本上,csv文件中有三个字段,而data=
行只有两个字段。
您还需要格式化xaxis
,方法是添加:
import matplotlib.dates as mdates
ax.xaxis.set_major_formatter(mdates.DateFormatter("%m/%d/%y"))
您可能想尝试pandas
,这会将此操作简化为两行:
import pandas as pd
DF=pd.read_csv('myfile.csv', header=None, names=['Time', 'x1', 'x2'])
DF.plot(x='Time', y=['x1', 'x2'])