Как редактировать длину оси X, но также поддерживать даты графика? - PullRequest
0 голосов
/ 26 января 2020

Ниже у меня есть код для построения графика.

#can change the 'iloc[x:y]' component to plot sections of chart

#ax = df['Data'].iloc[300:].plot(color = 'black', title = 'Past vs. Expected Future Path')
ax = df.plot('Date','Data',color = 'black', title = 'Past vs. Expected Future Path')

df.loc[df.index >= idx, 'up2SD'].plot(color = 'r', ax = ax)
df.loc[df.index >= idx, 'down2SD'].plot(color = 'r', ax = ax)
df.loc[df.index >= idx, 'Data'].plot(color = 'b', ax = ax)
plt.show()

#resize the plot
plt.rcParams["figure.figsize"] = [10,6]
plt.show()

enter image description here

Линии 2 (закомментированы) и 3 оба работают для построения всех графиков из линий вместе, как видно, однако я sh, чтобы иметь даты на оси X, а также иметь возможность строить участки графика (определенные по оси X, то есть от даты 1 до даты 2).

Используя строку 3, я могу построить график с датами на оси X, однако использование ".iloc [300:]", как в строке 2, не работает, так как 3 цветные линии отсоединяются от основной линии, как показано ниже. :

ax = df.iloc[300:].plot('Date','Data',color = 'black', title = 'Past vs. Expected Future Path')

enter image description here

Используя строку 2, я могу отредактировать длину оси x, однако на ней нет дат ось.

У кого-нибудь есть советы о том, как иметь даты и иметь возможность редактировать периоды оси X?

1 Ответ

1 голос
/ 26 января 2020

Для того, чтобы это работало, как вам нужно, вам нужно установить столбец 'date' в качестве индекса кадра данных. В противном случае df.plot не сможет узнать, что нужно использовать в качестве оси X. С датой, установленной в качестве индекса, pandas принимает выражения, такие как df.loc[df.index >= '20180101', 'data2'], для выбора диапазона времени и определенного столбца c.

Ниже приведен пример кода для демонстрации концепции.

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

dates = pd.date_range('20160101', '20191231', freq='D')
data1 = np.random.normal(-0.5, 0.2, len(dates))
data2 = np.random.normal(-0.7, 0.2, len(dates))
df = pd.DataFrame({'date': dates, 'data1':data1, 'data2':data2})

df.set_index('date', inplace=True)
df['data1'].iloc[300:].plot(color='crimson')
df.loc[df.index >= '20180101', 'data2'].plot(color='dodgerblue')
plt.tight_layout()
plt.show()

example plot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...