python - 如何在一个窗口上绘制多个 FacetGrid?
问题描述
在下面的代码中,我可以将两个简单的 seaborn 图放在一个窗口中,ax=ax[i]
方法是向每个图传递参数,但不适用于FacetGrid()
. 类似的问题已经在这里提出,想知道是否有人知道如何做到这一点。谢谢!
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt
df = sns.load_dataset('tips')
########################
# Works :)
########################
fig,ax = plt.subplots(nrows=2)
sns.regplot(x='total_bill', y='tip', data=df, ax=ax[0]) # plot #1
sns.boxplot(x='day', y='total_bill', data=df, ax=ax[1]) # plot #2
plt.show()
########################
# Does not work :(
########################
fig,ax = plt.subplots(nrows=2)
g = sns.FacetGrid(df, col="time", ax=ax[0]) # FacetGrid #1
g.map(plt.hist, "tip")
g = sns.FacetGrid(df, col="sex", hue="smoker", col_wrap=2, ax=ax[1]) # FacetGird #2
g.map(plt.scatter, "total_bill", "tip", alpha=.7)
g.axes[-1].legend()
plt.show()
解决方案
这是因为 FacetGrid 本身会产生子图并创建单个图形。FacetGrid 不允许使用子图。唯一的解决方案是将您的 FacetGrid 合并在一起以创建一个图 - 但是,除非您的轴相同,否则这并非易事。
如此处所述的解决方法是可能的: 将不同的 seaborn facet 网格组合成单个图
推荐阅读
- c# - 传递 NULL 时为参数分配默认值
- angular - 角度路由器路由保护或(de)解析
- html - WordPress - 如何将 CSS 样式添加到所有标题菜单按钮,同时排除一个
- android - OSMDROID 在 Android 中显示多条带折线的地图
- dart - dart 中的函数和用法变量名
- python - 文件的单独部分
- javascript - DOM 问题的 JavaScript 操作
- openlayers - 使用 Openlayers 加载 ImageServer 数据
- raspberry-pi - 树莓派 + Bluez + A2DP + AVRCP
- html - 为什么 flex div 是父 div 的 100% 宽度?