Построение вспомогательных участков в matplotlib из нескольких фреймов данных и стандартизация осей - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть 11 фреймов данных в python, которые имеют идентичные столбцы, но разбивают строки по году DateTime.Вот два примера моих фреймов данных:

_2008 = data[(data['fulldate'] > '2007-12-31') & (data['fulldate'] <= '2008-12-31')]
_2009 = data[(data['fulldate'] > '2008-12-31') & (data['fulldate'] <= '2009-12-31')]

Из этих фреймов данных я создаю графики в matplotlib, которые выглядят так: enter image description here

enter image description here

с использованием следующего кода:

plt.plot('fulldate','num_recvd', data=_2009, color='black')
plt.title('Number of Requests in 2009')
plt.xlabel('Month', fontsize=10)
plt.ylabel('Number of Requests', fontsize=10)

с изменением «data = _2009» в зависимости от года, поскольку данные за каждый год содержатся в отдельных фреймах данных,

Я хотел бы создать один график с подобластями, подобными этому:

enter image description here

, но не могу понять, как это сделать (яЯ искал ответы на других ресурсах).

Я также хотел бы стандартизировать ось, указав только месяцы на оси x и те же единицы на оси y (в некоторых годах число составляет до ~ 47,в то время как другие имеют количество только до 1 или 2).

С кодом в первом ответе я получаю этот график:

enter image description here

1 Ответ

0 голосов
/ 09 февраля 2019

Вы должны использовать pyplot.subplots.Вот некоторый демонстрационный код.Гораздо чище сначала создать поле year в ваших данных, затем сгруппировать его по year и построить график.

data.fulldate = pd.to_datetime(data.fulldate)
data['year'] = data.fulldate.dt.year

fig, axarr = plt.subplots(nrows=4, ncols=3, sharey=True)
axarr = axarr.flatten()

for i, (name, data_group) in enumerate(data.groupby('year')):
    ax = axarr[i]
    ax.plot('fulldate','num_recvd', data=data_group, color='black')
    ax.set_title('Number of Requests in ' + str(name))
    ax.set_xlabel('Month', fontsize=10)
    ax.set_ylabel('Number of Requests', fontsize=10)

Обратите внимание на sharey = True в первой строке: это означает, что все yоси будут иметь одинаковый масштаб.

...