我在使用matplotlib在同一图表上绘制日期和两个数据时遇到问题

时间:2014-04-04 00:37:57

标签: python matplotlib

我使用下面的代码制作简单的日期和一个数据图。现在我想在一张图上绘制两条数据。

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

有了日期和一条数据,我得到了可爱的结果

simple working graph

有人可以修改此代码,以便根据日期绘制2x数据吗?

1 个答案:

答案 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"))

enter image description here

您可能想尝试pandas,这会将此操作简化为两行:

import pandas as pd
DF=pd.read_csv('myfile.csv', header=None, names=['Time', 'x1', 'x2'])
DF.plot(x='Time', y=['x1', 'x2'])