Страницы

Поиск по вопросам

суббота, 21 марта 2020 г.

Matplotlib.pyplot.subplots() не отображает графики seaborn на разных сетках

#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()

Комментариев нет:

Отправить комментарий