仅在Matplotlib中按年绘制时间序列

时间:2018-10-29 03:23:12

标签: python python-3.x pandas datetime dataframe

我有一个系列,其中的日期采用日期时间格式,如下所示:

2015-05-10  00:00:00

我想在同一时间段内在数据框中绘制两个不同的值,我已经尝试过:

plt.subplot(211)
plt.plot(df['Date'].dt.year, df['Avg'], color='r')
plt.show()
plt.subplot(212)
plt.plot(df['Date'].dt.year, df['MW'], color='b')
plt.show()

但这给了我一种奇怪的格式,即使在绘图之外更改['Date']列也无法解决。

它绘制为:

2015.0    2015.5   2016.0   2016.5.....etc

尝试也更改为浮动形式,但无济于事。

我想要的是从2015年到2018年整个系列的年度滴答,但是当我转换为字符串或整数时,得到的内容类似于:

enter image description here

1 个答案:

答案 0 :(得分:0)

我认为

.set_xticks是设置x轴上的值的最易读的方法。

import pandas as pd
import matplotlib.pyplot as plt

data =[ {"Date":"2015-05-10", "Avg":34}, {"Date":"2016-05-10", "Avg":32}, 
        {"Date":"2017-05-10", "Avg":31}, {"Date":"2015-05-10", "Avg":31}, 
        {"Date":"2015-05-10", "Avg":26}, {"Date":"2015-05-10", "Avg":29}]

df = pd.DataFrame(data)

ax = plt.subplot(111)
ax.plot(df['Date'].dt.year, df['Avg'], color='r')
ax.set_xticks([2015, 2016, 2017])

plt.show()

由于您每年都有多个值,因此您似乎也遇到了问题,因此它绘制了您看到的垂直线。使用熊猫.groupby函数的合计值似乎是您想要的。

df["Year"] = df["Date"].dt.year

df = df.groupby("Year").mean().reset_index()

ax = plt.subplot(211)
ax.plot(df.Year, df['Avg'], color='r')
ax.set_xticks([2015, 2016, 2017])

plt.show()