Stacked barchart in PairGrid python seaborn

允我心安 提交于 2020-03-16 07:52:07

问题


I whish to reproduce the PairGrid plot found in that tutorial, but locally my barcharts are not stacked as in the tutorial and I can't figure out how to make them so.

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')

Do I have to follow the second answer of this post answer suggesting that it is very tricky to do with seaborn, or should I turn to back to plt as suggested here for a simpler chart ?

In any case I'm curious to understand how they stacked their bars in the tutorial linked above.


回答1:


The option for stacked histograms on the diagonal of a PairGrid has been removed from seaborn in this commit and hence is not available anymore in seaborn 0.9.

A workaround could be to collect all the data first and then plot it to the respective axes.

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()



来源:https://stackoverflow.com/questions/57644355/stacked-barchart-in-pairgrid-python-seaborn

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!