【问题标题】: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

谢谢

【问题讨论】:

    标签: python matplotlib seaborn visualization


    【解决方案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()
    

    【讨论】:

      猜你喜欢
      • 2019-01-31
      • 2016-08-16
      • 2021-08-21
      • 2019-11-14
      • 2017-05-11
      • 2018-12-21
      • 2016-08-09
      • 1970-01-01
      • 2016-10-10
      相关资源
      最近更新 更多