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的以获得更简单的图表?
在此提交中,已从 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)