Seaborn Facet Grid 'col=' 不在 Jupyter Notebook 中并排创建绘图

Posted

技术标签:

【中文标题】Seaborn Facet Grid \'col=\' 不在 Jupyter Notebook 中并排创建绘图【英文标题】:Seaborn Facet Grid 'col=' not creating plots side by side in Jupyter NotebookSeaborn Facet Grid 'col=' 不在 Jupyter Notebook 中并排创建绘图 【发布时间】:2021-02-23 05:50:16 【问题描述】:

我正在尝试并排绘制两个 seaborn catplots,而不是一个在另一个之上。为了不共享 x 轴,我必须创建一个 FacetGrid 实例并使用 '.map_dataframe' 函数来生成两个图,但它已将它们生成在另一个之上。 (我能够通过使用 'sns.catplot' 并排创建图,但是 'sharex=False' 参数不起作用,我最终得到了两个 x 轴上的所有值。)

这是我的代码:

grid = sns.FacetGrid(data = pcd_data,  col = 'Multi Storey Property')
grid.map_dataframe(sns.catplot, kind = 'bar', x="House Type ",
                   y="Percentage",  height = 6, hue="Last Balance Range Sort", 
                   palette = 'pastel', alpha = 0.6)
plt.close(1)
plt.show()

它产生了以下内容:

任何帮助将不胜感激。

我正在使用 Python 3.8.3 Anaconda。康达 4.9.1

谢谢

【问题讨论】:

【参考方案1】:

您可以使用示例数据集将列提供给catplot

import seaborn as sns
data = sns.load_dataset("exercise")
data = data.groupby(["diet","kind","time"])["pulse"].agg("mean").reset_index()
data.head()

    diet    kind    time    pulse
0   no fat  rest    1 min   91.8
1   no fat  rest    15 min  92.2
2   no fat  rest    30 min  93.0
3   no fat  walking 1 min   95.6
4   no fat  walking 15 min  98.6

sns.catplot(x='kind',y='pulse',hue='time',kind='bar',col='diet',data=data)

如果你有不同的x轴,你可以把x标签变成一个字符串:

data = data[~((data.diet=="no fat") & (data.kind=="rest"))]
data['kind'] = data['kind'].astype('str')

与@Alex 解决方案类似,您调用 facet 并将 barplot 映射到其上,第一个参数用于 x 轴、第二个 y 轴和第三个色调:

g = sns.FacetGrid(data, col="diet",sharex=False,sharey=False)
g.map(sns.barplot, "kind", "pulse",'time',hue_order=data.time.unique())

【讨论】:

谢谢。对不起,我可能没有很好地描述这个问题。我的问题是我希望我的地块像你的一样并排,但也不必在 x 轴上有相同的标签。例如。在您的示例中,假设假设“饮食=低脂肪”组没有“种类=休息”的数据,因此应该将其排除在右侧图表的 x 轴之外。在我的示例中,“sharex = False”参数不起作用。 好的是的..我编辑了我的答案,你需要使用 facet.. 看看它是否有效?【参考方案2】:

您正在使用catplot,它返回FacetGrid。相反,您应该直接使用sns.barplot

grid = sns.FacetGrid(data=pcd_data, col="Multi Storey Property")
grid.map_dataframe(
    sns.barplot,
    x="House Type ",
    y="Percentage",
    hue="Last Balance Range Sort",
    palette="pastel",
    alpha=0.6,
)
grid.set_axis_labels("House Type", "Percentage")
grid.add_legend()

【讨论】:

以上是关于Seaborn Facet Grid 'col=' 不在 Jupyter Notebook 中并排创建绘图的主要内容,如果未能解决你的问题,请参考以下文章

使用 facet_grid 和一个因子来确定列的填充颜色时保持列的顺序 (geom_col)

如何为 Seaborn Facet Plot 添加标题

摆脱那些灰色盒子上的 facet_grid 标签?

如何使用 Seaborn 创建 FacetGrid 堆叠条形图?

创建多列分面函数

pandas数据预处理(字段筛选query函数进行数据筛选缺失值删除)seaborn可视化分面图(facet)seaborn使用Catplot可视化分面箱图(Faceted Boxplot)