#python #matplotlib #seaborn
Есть непрерывная переменная df_train_tr['TransactionAmt'], хочу построить плотность
распределения переменной в изначальном формате и после применения функции log.
fig, ax = plt.subplots(1, 2, figsize=(11, 5), sharey=True)
plt.style.use('classic')
fig.patch.set_facecolor('xkcd:white')
ax[0]= sns.distplot(df_train_tr[df_train_tr['TransactionAmt'] <= 1000]['TransactionAmt'])
ax[0].set_xlabel('TransactionAmt', fontsize=16)
ax[0].set_title('Transaction Value distibution')
ax[0].set_ylabel('Probability', fontsize=16)
ax[0].axis(xmin=0)
ax[1] = sns.distplot(np.log(df_train_tr[df_train_tr['TransactionAmt'] <= 1000]['TransactionAmt']))
ax[1].set_xlabel('TransactionAmt', fontsize=16)
ax[1].set_title('Transaction Value distibution')
ax[1].set_ylabel('Probability', fontsize=16)
ax[1].axis(xmin=0)
plt.show()
Данный код рисует все на одном графике и, самое интересное, переменная ax состоит
из двух одинаковых объектов
[,
],
dtype=object)
Хотя до исполнения строчек с ax[0] и ax[1] объекты разные
[
]
Переписал, используя вместо sns.distplot() plt.hist()
ax[0].hist(df_train_tr[df_train_tr['TransactionAmt'] <= 1000]['TransactionAmt'])
#ax[0]= sns.distplot(df_train_tr[df_train_tr['TransactionAmt'] <= 1000]['TransactionAmt'])
ax[0].set_xlabel('TransactionAmt', fontsize=16)
ax[0].set_title('Transaction Value distibution')
ax[0].set_ylabel('Probability', fontsize=16)
ax[0].axis(xmin=0)
ax[1].hist(np.log(df_train_tr[df_train_tr['TransactionAmt'] <= 1000]['TransactionAmt']))
#ax[1] = sns.distplot(np.log(df_train_tr[df_train_tr['TransactionAmt'] <= 1000]['TransactionAmt']))
ax[1].set_xlabel('TransactionAmt', fontsize=16)
ax[1].set_title('Transaction Value distibution')
ax[1].set_ylabel('Probability', fontsize=16)
ax[1].axis(xmin=0)
plt.show()
И получил то, что хотел (y_axis - sic!)
Можно ли переписать код, чтобы получить второй вариант, но используя Seaborn?
Ответы
Ответ 1
Укажите явно axis, с которой работаете: import matplotlib.pyplot as plt import seaborn as sns import numpy as np fig, axs = plt.subplots(1, 2, figsize=(11, 5), sharey=True) plt.style.use('classic') fig.patch.set_facecolor('xkcd:white') x = np.random.randn(100) ax=axs[0] ax= sns.distplot(x, ax=ax) # <-- здесь ax.set_xlabel('TransactionAmt', fontsize=16) ax.set_title('Transaction Value distibution') ax.set_ylabel('Probability', fontsize=16) ax.axis(xmin=0) ax=axs[1] ax = sns.distplot(np.log(abs(x)), ax=ax, hist=False) # здесь я еще и гистограмму # отключил. для наглядности ax.set_xlabel('TransactionAmt', fontsize=16) ax.set_title('Transaction Value distibution') ax.set_ylabel('Probability', fontsize=16) ax.axis(xmin=0) plt.show()
Комментариев нет:
Отправить комментарий