使`matplotlib.pyplot.plot()`与`PeriodIndex一起工作

时间:2019-05-29 03:28:23

标签: python-3.x pandas dataframe matplotlib

我有一个DataFrame(df),它具有PeriodIndex和对应的整数列(OrderQuantity)。 (可将其视为关于特定产品一天的销售量的数据)。为了使用matplotlib.pyplot.plot()对此数据进行一些简单的可视化,我必须将PeriodIndex转换为Timestamp,否则plot()方法将引发错误TypeError: Axis must have freq set to convert to Periods。 MatPlotLib似乎试图将PeriodIndex转换为Periods,而没有意识到它已经具有Periods。

因此,目前,以下工作有效:

import matplotlib.pyplot as plt
%matplotlib inline
fig = plt.figure(figsize=(15,8))
plt.plot(df.index.to_timestamp(), df.OrderQuantity) // produces a valid plot

我想知道是否有一种更好的方法来绘制周期而不必转换为时间戳,该pyplot在生成图形之前会在内部转换回周期。

1 个答案:

答案 0 :(得分:0)

pandas.DataFrame.plot()具有关键字参数ax,用于明确指定要在其上绘制的轴,因此您可以基于两个(或多个)DataFrame创建图形。例如,

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

np.random.seed(42)

df1 = pd.DataFrame(
    np.random.randint(5, 20, size=7), columns=['foo'],
    index=pd.period_range('2019-05-30', periods=7, freq='D')
)
df2 = pd.DataFrame(
    np.random.randint(15, 40, size=7), columns=['bar'],
    index=pd.period_range('2019-05-30', periods=7, freq='D')
)

fig, ax = plt.subplots()
df1.plot(ax=ax)
df2.plot(ax=ax)
plt.show()

将产生以下图。

output image