Построение временных рядов по годам только в Матплотлибе - PullRequest
0 голосов
/ 29 октября 2018

У меня есть серия, в которой даты в формате datetime выглядят так:

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 голосов
/ 29 октября 2018

.set_xticks - это, на мой взгляд, самый читаемый способ установки значений, которые вы видите на оси х.

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()

Также похоже, что у вас проблемы, потому что у вас есть несколько значений для каждого года, поэтому он отображает вертикальные линии, которые вы видите. Совокупное значение, использующее функции pandas .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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...