将Pandas pivot_table子绘图到matplotlib图中会创建一个新图

时间:2018-04-25 02:26:46

标签: 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({'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两次绘制到两个子图上,即使我首先尝试绘制temp2,它​​仍会创建一个新的图形。

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

Screenshot of Multiple Figures 它不是在图1中的空子图中创建pivot_table图,而是创建一个新的图2。

1 个答案:

答案 0 :(得分:1)

可能导致问题的原因是您正在配对 pandas Series temp1 来自16调用)图和 pandas DataFrame temp2 形式value_counts调用)情节。由于您的数据透视表会产生一列数据帧,因此请考虑squeeze()将数据帧向下转换为一维数据集。然后从那里开始照常:

pivot_table

下面演示希望 df 中的随机数据复制原始数据结构:

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

Plot Output