在 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 图的主要内容,如果未能解决你的问题,请参考以下文章