gpt4 book ai didi

python - 使用 matplotlib 在 x 轴上绘制 datetimeindex 在 pandas 0.15 和 0.14 中创建错误的刻度

转载 作者:太空狗 更新时间:2023-10-29 17:57:19 25 4
gpt4 key购买 nike

我创建了一个带有一些随机值和 DatetimeIndex 的简单 pandas 数据框,如下所示:

import pandas as pd
from numpy.random import randint
import datetime as dt
import matplotlib.pyplot as plt

# create a random dataframe with datetimeindex
dateRange = pd.date_range('1/1/2011', '3/30/2011', freq='D')
randomInts = randint(1, 50, len(dateRange))
df = pd.DataFrame({'RandomValues' : randomInts}, index=dateRange)

然后我用两种不同的方式绘制它:

# plot with pandas own matplotlib wrapper
df.plot()

# plot directly with matplotlib pyplot
plt.plot(df.index, df.RandomValues)

plt.show()

(不要同时使用这两个语句,因为它们绘制在同一个图形上。)

我使用Python 3.4 64 位ma​​tplotlib 1.4。对于 pandas 0.14,这两个语句都给出了预期的图(它们使用的 x 轴格式略有不同,这没关系;请注意数据是随机的,因此图看起来不一样): pandas 0.14: pandas plot

pandas 0.14: matplotlib plot

但是,当使用 pandas 0.15 时,pandas 图看起来不错,但 matplotlib 图在 x 轴上有一些奇怪的刻度格式:

pandas 0.15: pandas plot

pandas 0.15: matplotlib plot

这种行为有什么充分的理由吗?为什么它从 pandas 0.14 变成了 0.15?

最佳答案

请注意,此错误已在 pandas 0.15.1 ( https://github.com/pandas-dev/pandas/pull/8693 ) 中修复,plt.plot(df.index, df.RandomValues) 现在又可以正常工作了。


这种行为变化的原因是从 0.15 开始,pandas Index 对象不再是 numpy ndarray 子类。但真正的原因是 matplotlib 不支持 datetime64 dtype。

作为解决方法,如果您想使用 matplotlib plot 函数,您可以使用 to_pydatetime 将索引转换为 python 日期时间:

plt.plot(df.index.to_pydatetime(), df.RandomValues)

更详细的解释:

因为 Index 不再是 ndarray 子类,matplotlib 会将索引转换为具有 datetime64 dtype 的 numpy 数组(而之前,它保留了 Index 对象,其中标量作为 Timestamp 值返回,datetime.datetime 的子类,matplotlib 可以处理)。在 plot 函数中,它在输入上调用 np.atleast_1d() 现在返回 datetime64 数组,matplotlib 将其作为整数处理。

我打开了一个关于这个的问题(因为这可能有很多用处):https://github.com/pydata/pandas/issues/8614

关于python - 使用 matplotlib 在 x 轴上绘制 datetimeindex 在 pandas 0.15 和 0.14 中创建错误的刻度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26526230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com