Python 在matplotlib图形中对表进行子绘图将创建一个新图形

Python 在matplotlib图形中对表进行子绘图将创建一个新图形,python,pandas,matplotlib,Python,Pandas,Matplotlib,我尝试使用以下代码在一个图形中创建两个条形图: 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({'

我尝试使用以下代码在一个图形中创建两个条形图:

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_表上。我可以在两个子图上绘制两次temp1,即使我尝试先绘制temp2,它仍然会创建一个新图形

下面是正在发生的事情的屏幕截图:


它没有在图1中的空子图中创建pivot_表图,而是创建了一个新的图2。

问题可能是因为您正在将pandas系列(temp1 from
value_counts
call)图和pandas数据框(temp2 form
pivot_表
call)图配对。由于您的数据透视表导致一列数据文件,所以考虑将数据文件降级为一维序列。然后像往常一样,从那里开始:

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

这是否有助于发布帮助?@Parfait我已经在问题中添加了我的问题的屏幕截图,谢谢。@ScottBoston谢谢,但这与您链接的问题有点不同。我在原来的问题中添加了一个截图。