python - 将 Pandas pivot_table 子绘制到 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 它仍然会创建一个新图形。
这是正在发生的事情的屏幕截图:
解决方案
可能是因为您将pandas Series(temp1 from value_counts
call)图和pandas DataFrame(temp2 form pivot_table
call)图配对。由于您的数据透视表生成单列数据框,因此请考虑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()
推荐阅读
- python - 在 python-docx-template 中使用 XLSX 作为数据库的问题
- c++ - 在向量映射中访问向量的元素
- algorithm - 是分段生成 O(n^4)
- javascript - Intersection Observer:无法实现observer.unobserve(image);
- virtual-machine - 适用于 Windows Server 的 KVM 虚拟化鼠标不稳定
- java - JPA 查询或自定义查询根据两个表中的搜索词查找结果
- matlab - 你能用 ~any() 帮助我理解这两条 matlab 行吗
- python - 在文本文件python tkinter中生成新行的条目末尾的随机空间
- php - 如何打印最多 10 个不在数组中的数字?
- php - 将数组分解为多维数组(父->子->子子)