#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()
Комментариев нет:
Отправить комментарий