Подплоттинг Pandas pivot_table в фигуру matplotlib создает новую фигуру - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь создать две гистограммы на одной фигуре, используя следующий код:

import matplotlib.pyplot as plt
import pandas as pd

df = read_csv(...)

temp1 = df['Credit_History'].value_counts(ascending=True)
temp2 = df.pivot_table(values='Loan_Status',index=['Credit_History'],aggfunc=lambda x: x.map({'Y':1,'N':0}).mean())

fig = plt.figure(figsize=(8,4))
ax1 = fig.add_subplot(121)
temp1.plot(kind='bar')

ax2 = fig.add_subplot(122)
temp2.plot(kind = 'bar')

Фигура настроена правильно, создаются вспомогательные участки и отображается график temp1, но когда я пытаюсьчтобы построить temp2 (сводную таблицу), он создает новую фигуру вместо того, чтобы рисовать на втором участке.Похоже, это происходит только с pivot_table.Я могу нанести temp1 дважды на оба субплота, и даже если я попытаюсь сначала построить темп2, он все равно создаст новую фигуру.

Вот скриншот происходящего:

Screenshot of Multiple Figures Вместо создания графика pivot_table в пустом субплоте на рисунке 1 создается новый рисунок 2.

1 Ответ

0 голосов
/ 25 апреля 2018

Возможно, проблема возникает из-за того, что вы соединяете график Серии панд ( temp1 из value_counts call) и pandas DataFrame ( temp2 Форма pivot_table Звонок) Сюжет. Поскольку ваша сводная таблица приводит к кадру данных из одного столбца, рассмотрите squeeze(), чтобы преобразовать данные в одномерный ряд. А потом оттуда сюжет как обычно:

temp1 = df['Credit_History'].value_counts(ascending=True).sort_index()

temp2 = df.pivot_table(values='Loan_Status', index='Credit_History',
                       aggfunc=lambda x: x.map({'Y':1,'N':0}).mean())
temp2 = temp2.squeeze()

Ниже показаны случайные данные в надежде. df копирует исходную структуру данных:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

np.random.seed(42518)   # SEED FOR RANDOM REPRODUCIBILITY
df = pd.DataFrame({'Credit_History': np.random.choice(['debt', 'credit'], 50),
                   'Loan_Status': np.random.choice(['Y', 'N'],50),
                   'Amount': abs(np.random.randn(50))*1000
                  }, columns = ['Credit_History','Loan_Status','Amount'])

temp1 = df['Credit_History'].value_counts(ascending=True).sort_index()

temp2 = df.pivot_table(values='Loan_Status', index='Credit_History',
                       aggfunc=lambda x: x.map({'Y':1,'N':0}).mean())
temp2 = temp2.squeeze()

fig = plt.figure(figsize=(8,4))

ax1 = fig.add_subplot(121)
temp1.plot(kind = 'bar')

ax2 = fig.add_subplot(122)
temp2.plot(kind = 'bar')

plt.show()

Plot Output

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...