【问题标题】:Arranging multiple for loop categorical plots with Seaborn使用 Seaborn 排列多个 for 循环分类图
【发布时间】:2018-01-27 16:14:16
【问题描述】:

我正在使用 for 循环为数据框 df 创建多个分类图:

object_bol = df.dtypes == 'object'
for catplot in df.dtypes[object_bol].index:
    sns.countplot(y=catplot,data=df)

plt.show()

输出是一个接一个地排序的所有图,我如何将其分配给具有 n 列和 m 行的网格(n 和 m 取决于数据框中的对象数量)?

【问题讨论】:

  • 你有样本数据吗?我想你应该看看FacetGrid
  • 使用通常的plt.subplots 机制可能也很好,但是如果没有对输入数据和预期结果的彻底解释,这个问题可能无法回答。
  • 输入数据是一个数据框,假设有 20 个变量,其中 15 个是分类变量,因此使用类型对象过滤它们。上面的 for 循环为每个分类变量绘制计数图,但在单个列中。这适用于小型数据集,但具有 20 多个分类变量的数据集向下滚动太繁琐,我希望将这 20 多个图排列在一个网格中,让我们看到 4 列和 5 行。希望这有助于更好地理解这个问题。
  • 这不是评论,而是应该是问题的一部分。您可能还想阅读How to make good reproducible pandas examples

标签: python pandas seaborn


【解决方案1】:

您可能希望将示例从 How do I plot two countplot graphs side by side in seaborn? 扩展到更多子图。

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

df=pd.DataFrame(np.random.choice(list("abcd"), size=(100,20), p=[.4,.3,.2,.1]))

fig, axes =plt.subplots(5,4, figsize=(10,10), sharex=True)
axes = axes.flatten()
object_bol = df.dtypes == 'object'
for ax, catplot in zip(axes, df.dtypes[object_bol].index):
    sns.countplot(y=catplot, data=df, ax=ax, order=np.unique(df.values))

plt.tight_layout()  
plt.show()

如果没有 seaborn,你会直接从 pandas 获得类似的东西:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df=pd.DataFrame(np.random.choice(list("abcd"), size=(100,20), p=[.4,.3,.2,.1]))

df.apply(pd.value_counts).plot(kind="barh", subplots=True, layout=(4,5), legend=False)

plt.tight_layout()  
plt.show()

【讨论】:

  • 如何将这些子图组合成一个长图?
猜你喜欢
  • 2020-03-20
  • 2021-09-23
  • 2014-04-23
  • 1970-01-01
  • 2021-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多