在 Seaborn/其他库中聚合的 FacetGrid 图

Posted

技术标签:

【中文标题】在 Seaborn/其他库中聚合的 FacetGrid 图【英文标题】:FacetGrid plot with aggregate in Seaborn/other library 【发布时间】:2021-10-12 09:44:08 【问题描述】:

我有这样的玩具数据框:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

df = pd.DataFrame('cat': ['a', 'a', 'a', 'b', 'b', 'b'], 'n1': [1,1,1,4,5,6], 'n2': [6,5,2,2,2,1])

我想按cat 分组并为n1n2 绘制直方图,另外我想在不分组的情况下绘制这些直方图,所以首先将数据转换为seaborn 格式:

df2 = pd.melt(df, id_vars='cat', value_vars=['n1', 'n2'], value_name='value')

第二次添加“全部”:

df_all = df2.copy()
df_all['cat'] = 'all'
df3 = pd.concat([df2, df_all])

最后绘制:

g = sns.FacetGrid(df2, col="variable", row="cat")
g.map(plt.hist, 'value', ec="k")

我想知道,是否可以以更优雅、更简洁的方式完成,而无需创建 df3df2。可以使用不同的库。

【问题讨论】:

这对我来说似乎很干净。如果您必须经常这样做,请构建一个以 df 作为输入的函数,执行熔化并输出最终的 df3 或直接输出绘图。 【参考方案1】:

正如我在评论中提到的,我认为您所做的一切都很好。如果需要经常执行,请制作一个函数。不过,您可能对pandas_profiling 感兴趣。这以交互方式详细描述了您的数据配置文件。在我看来,这对于您想要做的事情来说可能是矫枉过正,但我​​会让您来判断;)

import pandas_profiling
df.profile_report()

交互式输出的摘录:

【讨论】:

谢谢,我在想 seaborn 提供了像“include_aggregate=True”这样的参数,我不知道。这样解决方案将更具声明性。

以上是关于在 Seaborn/其他库中聚合的 FacetGrid 图的主要内容,如果未能解决你的问题,请参考以下文章

如何用聚合值注释 seaborn barplot

有啥方法可以正确聚合时间序列数据以使用 matplotlib/seaborn 制作散点图?

seaborn库中柱状图绘制详解

如何在 pandas DataFrame 中选择具有 MultiIndex 的列(用于 seaborn 散点图)?

Python 绘图总结(seaborn库的使用) (上)

数据可视化专题——Seaborn简介