python - 将 Pandas hub_table 子图绘制到 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({'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 (数据透视表)时,它会在我身上创建一个新图,而不是绘制到第二个子图上。这似乎只发生在数据透视表中。我可以在两个子图上绘制 temp1 两次,即使我尝试先绘制 temp2,它​​仍然会创建一个新图形。

这是所发生情况的屏幕截图:

Screenshot of Multiple Figures 它不是在图 1 中的空子图中创建数据透视表图,而是创建一个新的图 2。

最佳答案

可能会出现此问题,因为您将 pandas Series(来自 value_counts 调用的 temp1)图和 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

关于python - 将 Pandas hub_table 子图绘制到 matplotlib 图中创建一个新图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50013162/

相关文章:

python - 如何解析时间表达式(尤其是时间范围),Python?

Pandas - 查找两个或多个满足条件的行

python - 更改 Pandas 数据框列顺序

python - 用散点图叠加直方图的列

python - 从单个 jupyter/ipython 单元绘制多个 python-igraph 图

python - x 轴被转换为 float

python 子进程模块在执行批处理文件时卡住

python - 无法导入 torch - 找不到图像

Python ImageIO 警告 :root:IMAGEIO FFMPEG_WRITER WARNING

python - 如何将列名与字典键匹配并向计数器添加值