簡體   English   中英

Pandas 並排堆積條形圖

[英]Pandas side-by-side stacked bar plot

我想創建一個泰坦尼克號數據集的堆積條形圖。 情節需要按“Pclass”、“Sex”和“Survived”分組。 我設法通過大量繁瑣的 numpy 操作來生成下面的標准化圖(其中“M”是男性,“F”是女性) 在此處輸入圖片說明

有沒有辦法使用熊貓內置的繪圖功能來做到這一點?

我試過這個:

import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('train.csv')
df_grouped = df.groupby(['Survived','Sex','Pclass'])['Survived'].count()
df_grouped.unstack().plot(kind='bar',stacked=True,  colormap='Blues', grid=True, figsize=(13,5));

在此處輸入圖片說明

這不是我想要的。 反正有沒有使用熊貓繪圖生成第一個繪圖? 提前致謝

生成的條形不會像您的第一個圖中那樣彼此相鄰,但除此之外,pandas 可讓您按如下方式執行所需的操作:

df_g = df.groupby(['Pclass', 'Sex'])['Survived'].agg([np.mean, lambda x: 1-np.mean(x)])
df_g.columns = ['Survived', 'Died']
df_g.plot.bar(stacked=True)

在此處輸入圖片說明

這里,由於堆疊的要求,補丁的水平分組變得復雜。 例如,如果我們只關心“Survived”的價值,pandas 可以開箱即用地處理它。

df.groupby(['Pclass', 'Sex'])['Survived'].mean().unstack().plot.bar()

在此處輸入圖片說明

如果臨時解決方案足以對繪圖進行后處理,那么這樣做也不是非常復雜:

import numpy as np
from matplotlib import ticker

df_g = df.groupby(['Pclass', 'Sex'])['Survived'].agg([np.mean, lambda x: 1-np.mean(x)])
df_g.columns = ['Survived', 'Died']
ax = df_g.plot.bar(stacked=True)

# Move back every second patch
for i in range(6):
    new_x = ax.patches[i].get_x() - (i%2)/2
    ax.patches[i].set_x(new_x)
    ax.patches[i+6].set_x(new_x)

# Update tick locations correspondingly
minor_tick_locs = [x.get_x()+1/4 for x in ax.patches[:6]]
major_tick_locs = np.array([x.get_x()+1/4 for x in ax.patches[:6]]).reshape(3, 2).mean(axis=1)
ax.set_xticks(minor_tick_locs, minor=True)
ax.set_xticks(major_tick_locs)

# Use indices from dataframe as tick labels
minor_tick_labels = df_g.index.levels[1][df_g.index.labels[1]].values
major_tick_labels = df_g.index.levels[0].values
ax.xaxis.set_ticklabels(minor_tick_labels, minor=True)
ax.xaxis.set_ticklabels(major_tick_labels)

# Remove ticks and organize tick labels to avoid overlap
ax.tick_params(axis='x', which='both', bottom='off')
ax.tick_params(axis='x', which='minor', rotation=45)
ax.tick_params(axis='x', which='major', pad=35, rotation=0)

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM