【问题标题】:Python plot dates using matplotlibPython 使用 matplotlib 绘制日期
【发布时间】:2012-04-17 21:33:29
【问题描述】:

我是 Python 和 matplotlib 的初学者,但我正在努力学习!我想使用 matplotlib 从包含频率的日期的 CSV 中绘制一些简单的数据。 X 轴包含日期,Y 轴包含频率。来自 CSV 的示例数据:

2011/12/15,5
2011/12/11,4
2011/12/19,2

我检查了“matplotlib.sf.net/examples”,但似乎所有测试数据都是从 http get 下载的。如果有人能用一些示例代码指导我如何读入(可能使用 CSV 阅读器)并在图表中显示数据,我将不胜感激。

谢谢!!

【问题讨论】:

  • 您希望如何表示数据?直方图?示例数据是 CSV 文件的复制和粘贴吗?我假设您在同一个单元格中有 X 和 Y 值?
  • 还有,数据都在一行吗?
  • Harpal - 感谢您的回复。理想情况下,最好将它放在折线图中。关于 X 和 Y 是正确的,但我可以将其存储在 CSV 中的方式调整为任何格式,以使其更容易另一种方式。谢谢。
  • 实际上每一行都有一个数据和一个频率所以第一行:2011/12/15,5 第二行:2011/12/10,4

标签: python csv matplotlib wxpython


【解决方案1】:

也许你在寻找类似的东西:

import csv
import datetime as dt
import matplotlib.pyplot as plt

arch = 'C:\\Python26\\programas\\test.csv'
data = csv.reader(open(arch))

data = [(dt.datetime.strptime(item, "%Y/%m/%d"), 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)

ax.grid(True)
fig.autofmt_xdate()

plt.show()

【讨论】:

    【解决方案2】:

    我试图让我的代码尽可能简单,这绝不是优雅的,但你可以这样:

    import csv
    import matplotlib.pyplot as plt
    
    ### Making test CSV file ###
    data = [['2011/12/15,5'],['2011/12/11,4'],['2011/12/19,2'],['2011/12/16,3'],['2011/12/20,8'],['2011/12/14,4'],['2011/12/10,10'],['2011/12/9,7']]
    with open('test.csv', 'wb') as f:
        writer = csv.writer(f)
        for i in data:
            writer.writerow(i)
    
    
    ### Extract data from CSV ###
    with open('test.csv', 'rb') as n:
        reader = csv.reader(n)
        dates = []
        freq = []
        for row in reader:
            values = row[0].split(',')
            dates.append(values[0])
            freq.append(values[1])          
    
    
    ### Do plot ###
    false_x = [x for x in range(len(dates))]
    plt.plot(false_x,freq, 'o-')
    plt.xticks(range(len(dates)), (dates), rotation=45)
    # plt.axis([xmin, xmax, ymin, ymax]) - sets axes limits on graph
    plt.axis([-1, 8, 0, 11])
    plt.show()
    

    这使得:

    【讨论】:

    • 非常感谢。很有帮助!
    • 此示例使用 csv.reader 并手动拆分行,这不是必需的,并且可能会导致某些 csv 文件出现问题。有一个关于它的问题here 以获得更详细的解释。不过,Harpal 的回答对我进入 matplotlib 有很大帮助。
    猜你喜欢
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多