seaborn的factorplot无法绘制到matplotlib subplot指定位置该如何解决
问题原因
- seaborn中的
factorplot(0.11版本后已更名为catplot)是Figure级别的绘图接口,设计初衷就是自主创建独立的画布(Figure)和子图网格,因此即使传入提前生成的ax参数也不会生效,默认会生成新的画布渲染图像,这就是提前创建的ax[1]位置没有显示图像的原因。
解决方案
方案1:改用Axes级别的分类绘图函数
如果只需要绘制单个分类图到指定子图位置,直接用对应类型的Axes级函数即可,比如factorplot默认渲染的点图可以改用sns.pointplot实现,修改后代码如下:
import matplotlib.pyplot as plt import seaborn as sns import pandas as pd # 示例数据,可替换为自己的data变量 data = pd.DataFrame({ 'A': ['类别1', '类别2', '类别3', '类别1', '类别2', '类别3'], 'B': [10, 20, 15, 12, 22, 17] }) f, ax = plt.subplots(1, 2, figsize=(12, 6)) sns.barplot(x='A', y='B', data=data, ax=ax[0]) sns.pointplot(x='A', y='B', data=data, ax=ax[1]) plt.show()
注:barplot、pointplot、boxplot这类接口均为Axes级,可以直接指定
ax参数绑定到提前创建的子图上。
方案2:直接用catplot(原factorplot)的分面参数生成子图网格
如果需要用到factorplot的分面功能,不需要提前创建plt.subplots,直接通过row/col参数控制子图布局即可:
# 适合同类型图分面的场景,绘制不同类型图并排优先选方案1 sns.catplot(x='A', y='B', col='分组列名', data=data, kind='bar') plt.show()
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

