【问题标题】:Subplotting Pandas pivot_table into matplotlib figure creates a new figure将 Pandas pivot_table 子绘制到 matplotlib 图形中会创建一个新图形
【发布时间】:2018-04-25 22:12:11
【问题描述】:

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

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 它仍然会创建一个新图形。

这是发生的事情的屏幕截图:

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

【问题讨论】:

  • stackoverflow.com/a/50011617/6361531 这个 SO 帖子有帮助吗?
  • @Parfait 我已将我的问题的屏幕截图添加到问题中,谢谢。
  • @ScottBoston 谢谢,但这与您链接的问题有点不同。我已在原始问题中添加了屏幕截图。

标签: python pandas matplotlib


【解决方案1】:

问题可能源于您将 pandas Seriestemp1 来自 value_counts 调用)图和 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()

【讨论】:

    猜你喜欢
    • 2016-11-08
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多