Python - Matplotlib: построение сводной таблицы для гидрологического года - PullRequest
1 голос
/ 24 сентября 2019

В настоящее время я работаю над некоторыми гидрологическими данными, поэтому я делаю некоторый анализ с помощью функции pivot.Таким образом, гидрологический год считается с октября по сентябрь, я хочу построить их таким образом.Итак, есть ли способ в matplotlib изменить сортировку оси X на моем графике?

Моя функция поворота выглядит следующим образом:

pv = pd.pivot_table(df_mb, index=df_mb.index.month, columns=df_mb.index.year, aggfunc='mean')

pv.MB

    2011        2012            2013
1   NaN         0.159587        0.119823
2   NaN         0.134704        0.129065
3   NaN         0.163604        0.156006
4   NaN         0.451304        0.260984
5   NaN         0.202280        0.286951
6   NaN         -0.656959       -0.266000
7   NaN         -1.000123       -1.284144
8   NaN         -1.477041       -0.694400
9   NaN         0.002894        -0.196538
10  0.186086    0.191084        0.307935
11  0.299759    0.451645        NaN
12  0.133154    0.048562        NaN

и выводит мне график, подобный этому: Pivot-plot

Итак, я хочу, чтобы ось x моего графика начиналась с 10 и заканчивалась на 9. Кто-нибудь знает, как туда добраться?

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Вы можете использовать pandas concat , чтобы переупорядочить фрейм данных, сбросить индекс и использовать столбец 'index', сгенерированный reset_index() (переупорядоченный индекс), в качестве новых меток.

dd = pd.concat([df.loc[df.index[9:]], df.loc[df.index[:9]]]).reset_index()

ax = dd[dd.columns.drop('index')].plot()
ax.set_xticks(dd.index)
ax.set_xticklabels(dd['index'])
plt.xlabel("month")
plt.show()

Вы получаете это:

enter image description here

1 голос
/ 24 сентября 2019

Вы можете определить новые столбцы следующим образом:

df['col'] = np.where(df.index.month < 10, df.index.year, df.index.year + 1)
df['idx'] = np.where(df.index.month < 10, df.index.month+3, df.index.month-9)

df.pivot_table(index='idx',columns='col', values='val', aggfunc='mean')

дает, например:

col  2014  2015
idx            
1       8     7
2       8     3
3       6     6
4       2     4
5       8     3
6       7     7
7       2     6
8       1     1
9       5     3
10      4     5
11      4     8
12      5     4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...