У меня есть данные платежа для трех клиентов с указанием месяца и года каждого платежа:
user_id amount Mon_Year
2076273 1664 245.16 Jan-2019
3682561 1664 122.58 Jul-2019
5437947 1664 109.43 Nov-2019
6067277 1664 218.86 Dec-2019
1911317 3396 319.00 Jan-2019
6079810 3396 360.00 Dec-2019
1961388 4192 104.28 Jan-2019
2500575 4192 104.28 Mar-2019
2709024 4192 104.28 Apr-2019
3049894 4192 104.28 May-2019
И я могу создать для каждого клиента график штрафа:
for user in df.user_id.unique():
temp = df[df['user_id']==user]
plt.figure(figsize=(15,5))
ax = sns.barplot(x="Mon_Year", y="amount", data=temp,ci=None)
ax.set_title(f'transactions for user: {user}')
ax.set_xticklabels(ax.get_xticklabels(),rotation=30)
plt.show()
![plots](https://i.stack.imgur.com/rGmdk.png)
Однако я бы хотел, чтобы на каждом графике были одинаковые символы (все даты в столбце Mon_Year
), чтобы графики имели одинаковый масштаб.
График № 2 отсутствует несколько месяцев, поэтому в идеале он должен иметь пустые столбцы. Я смогу немного проще сравнивать клиентов и видеть, в какие месяцы ничего не было потрачено. Вот так:
![enter image description here](https://i.stack.imgur.com/zEKEn.png)
Я пытался использовать xlim
, но полностью сломал его, я думаю, что это работает только для числовых данных, но Mon_Year
категоричен.
Для этого примера df диапазон xticks идет с января 2019 по De c 2019:
df.Mon_Year.unique()
array(['Jan-2019', 'Jul-2019', 'Nov-2019', 'Dec-2019', 'Mar-2019',
'Apr-2019', 'May-2019'], dtype=object)
Обратите внимание, что в df все они предварительно отсортированы в Monthly заказ для каждого клиента.
Как я могу установить xlim
для категориальных данных и сохранить его одинаковым для каждой итерации графиков?
Mu sample df:
import pandas as pd
import seaborn as sns
df = pd.DataFrame({'index': pd.Series([2076273, 3682561, 5437947, 6067277, 1911317, 6079810, 1961388, 2500575, 2709024, 3049894],dtype='int64',index=pd.RangeIndex(start=0, stop=10, step=1)), 'user_id': pd.Series(['1664', '1664', '1664', '1664', '3396', '3396', '4192', '4192', '4192', '4192'],dtype='object',index=pd.RangeIndex(start=0, stop=10, step=1)), 'amount': pd.Series([245.16, 122.58, 109.43, 218.86, 319.0, 360.0, 104.28, 104.28, 104.28, 104.28],dtype='float64',index=pd.RangeIndex(start=0, stop=10, step=1)), 'Mon_Year': pd.Series(['Jan-2019', 'Jul-2019', 'Nov-2019', 'Dec-2019', 'Jan-2019', 'Dec-2019', 'Jan-2019', 'Mar-2019', 'Apr-2019', 'May-2019'],dtype='object',index=pd.RangeIndex(start=0, stop=10, step=1))}, index=pd.RangeIndex(start=0, stop=10, step=1))