python - PairGrid python 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')
我是否必须遵循this post answer的第二个答案,暗示与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()
推荐阅读
- r - Rselenium 可以使用 Edge 作为浏览器吗?
- javascript - 文字应该是不可见的
- c - 为什么我的编译器跳过函数调用?
- excel - 备份数据以供以后恢复(保存以前的值)
- sql - 如何将表格列显示为行
- segmentation-fault - 这种情况下为什么会出现“segmentation fault”
- google-apps-script - “不支持嵌套扣项目”错误修复
- html - 汉堡菜单的行距过大
- python - 为什么我的 Plotly Graph 显示多个重复的数据?
- python - 如何使用 AWS Lambda 函数 Python 获取自动缩放组中的实例 ID