PairGrid python seaborn 中的堆叠条形图

Mal*_*oné 1 python matplotlib seaborn

我希望重现该教程中的 PairGrid 图,但在本地我的条形图不像教程中那样堆叠,我不知道如何使它们如此。

import seaborn as sns
import matplotlib.pyplot as plt  # for graphics
import os
os.sys.version
# '3.6.4 (default, Sep 20 2018, 19:07:50) \n[GCC 5.4.0 20160609]'

sns.__version__    
# '0.9.0'

mpg = sns.load_dataset('mpg')

g = sns.PairGrid(data=mpg[["mpg", "horsepower", "weight", "origin"]], hue="origin")
g.map_upper(sns.regplot)
g.map_lower(sns.residplot)

# below for the histogram
g.map_diag(plt.hist)

# also I tried
# g.map_diag(lambda x, label, color: plt.hist(x, label=label, color=color, histtype='barstacked', alpha=.4))
# g.map_diag(plt.hist, histtype='barstacked')
# but same result

g.savefig('./Plots/mpg.svg')

Run Code Online (Sandbox Code Playgroud)

我的情节

教程的情节

我是否必须遵循此帖子答案的第二个答案,这表明处理 seaborn 非常棘手,还是应该按照此处的建议返回 plt的以获得更简单的图表?

无论如何,我很想知道他们如何在上面链接教程中堆叠他们的酒吧。

Imp*_*est 5

此提交中,已从 seaborn 中删除了 PairGrid 对角线上堆叠直方图的选项,因此在 seaborn 0.9 中不再可用。

解决方法可能是首先收集所有数据,然后将其绘制到相应的轴上。

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd 

df = sns.load_dataset('mpg')

g = sns.PairGrid(data=df[["mpg", "horsepower", "weight", "origin"]], hue="origin")
g.map_upper(sns.regplot)
g.map_lower(sns.residplot)

# below for the histograms on the diagonal
d = {}
def func(x, **kwargs):
    ax = plt.gca()

    if not ax in d.keys():
        d[ax] = {"data" : [], "color" : []}
    d[ax]["data"].append(x)
    d[ax]["color"].append(kwargs.get("color"))

g.map_diag(func)
for ax, dic in d.items():
    ax.hist(dic["data"], color=dic["color"], histtype="barstacked")

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明