【问题标题】:Plotting Pandas DataFrames as single days on the x-axis in Python/Matplotlib在 Python/Matplotlib 中将 Pandas DataFrames 绘制为 x 轴上的单日
【发布时间】:2014-06-09 20:10:48
【问题描述】:

我有这样的数据:

    col1  ;col2
2001-01-01;1
2001-01-01;2
2001-01-02;3
2001-01-03;4
2001-01-03;2
2001-01-04;2

我正在 Python/Pandas 中使用 pd.read_csv(...) 将其读取到 DataFrame 中。 现在我想每天在 y 轴上绘制 col2 和在 x 轴上绘制 col1 。我进行了很多搜索,但找不到太多非常有用的页面来详细描述这一点。我发现 matplotlib 目前不支持存储日期的数据格式(datetime64)。

我尝试像这样转换它:

fig, ax = plt.subplots()
X = np.asarray(df['col1']).astype(DT.datetime)
xfmt = mdates.DateFormatter('%b %d')
ax.xaxis.set_major_formatter(xfmt)
ax.plot(X, df['col2'])
plt.show()

但这不起作用。 什么是最好的方法? 我只能在那里找到一些位和位,但没有真正完整的工作,更重要的是,与最新版本的 pandas/numpy/matplotlib 的此功能相关的最新资源。

我也有兴趣将此绝对日期转换为连续的日索引,即: 开始日期 2001-01-01 是第 1 天,因此数据如下所示:

    col1  ;col2 ; col3
2001-01-01;1;1
2001-01-01;2;1
2001-01-02;3;2
2001-01-03;4;3
2001-01-03;2;3
2001-01-04;2;4
.....
2001-02-01;2;32

非常感谢您。

【问题讨论】:

    标签: python numpy matplotlib plot pandas


    【解决方案1】:

    Pandas.read_csv 支持 parse_dates=True(当然默认为 False),这样可以节省您单独转换日期的时间。

    对于像这样的简单数据框,pandas plot() 函数也可以很好地工作。 示例:

    dates = pd.date_range('20160601',periods=4)
    dt = pd.DataFrame(np.random.randn(4,1),index=dates,columns=['col1'])
    dt.plot()
    plt.show() 
    

    【讨论】:

      【解决方案2】:

      好吧,据我所知,不再需要直接使用matplotlib,而是熊猫本身已经提供了可以用作数据框对象方法的绘图函数,请参阅http://pandas.pydata.org/pandas-docs/stable/visualization.html。这些函数本身使用 matplotlib,但更易于使用,因为它们自己正确处理数据类型 :-)

      【讨论】:

        猜你喜欢
        • 2018-08-31
        • 1970-01-01
        • 2012-03-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多