catplot和subplot有限制吗?

时间:2019-06-27 09:41:51

标签: python seaborn categorical-data subplot

Seaborn的猫形图似乎无法与plt.subplots()一起使用。我不确定这里的问题是什么,但我似乎无法将它们放在一起。

#Graph 1
plt.subplot(121)
sns.catplot(x="HouseStyle",y="SalePrice",data=df,kind="swarm")

#Graph 2
plt.subplot(122)
sns.catplot(x="LandContour",y="SalePrice",data=df,kind="swarm")

输出: Weird no output Weird no output2 Finally output

3 个答案:

答案 0 :(得分:2)

您需要在绘制时将创建的轴传递给seaborn的catplot。以下是演示此问题的示例答案。几件事

  • 我建议使用add_subplot来创建像您一样的子图
  • catplot仍将返回可以使用plt.close()关闭的轴对象,其中括号内的数字对应于图形数。有关close()
  • 的更多详细信息,请参见this answer

完整的可重复答案

import seaborn as sns
import matplotlib.pyplot as plt

exercise = sns.load_dataset("exercise")

fig = plt.figure()

ax1 = fig.add_subplot(121)
g = sns.catplot(x="time", y="pulse", hue="kind", data=exercise, ax=ax1) # pass ax1

ax2 = fig.add_subplot(122)
g = sns.catplot(x="time", y="pulse", hue="kind", data=exercise, ax=ax2) # pass ax2

plt.close(2)
plt.close(3)
plt.tight_layout()

enter image description here

答案 1 :(得分:0)

感谢Sheldore提供了使用close()的想法。我尝试过这种方法,它奏效了。

_, ax = plt.subplots(2, 3, figsize=(20,10))
for n, feat in enumerate(cat_feats):
        sns.catplot(x='feat', kind='count', data=df, ax=ax[n//3][n%3])
        plt.close()

答案 2 :(得分:0)

Catplot 是图形级函数,而您不能使用轴。尝试改用 stripplot

fig, axs = plt.subplots (1, 2, figsize=(25, 15))
sns.stripplot(x='category_col', y='y_col_1', data=df, ax=axs[0])
sns.stripplot(x='category_col', y='y_col_2', data=df, ax=axs[1])