【问题标题】:I'm having trouble plotting date and two pieces of data on same graph with matplotlib我在使用 matplotlib 在同一张图上绘制日期和两条数据时遇到问题
【发布时间】:2014-04-04 00:37:56
【问题描述】:

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

数据 (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 数据吗?

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    进行这些更改,您就可以开始了:

    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'])
    

    【讨论】:

    • 非常感谢朱总。我缺少的那行 ax.plot(x, z, color='red') 现在可以理解了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 2020-09-12
    • 1970-01-01
    • 2023-03-09
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多