You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Seaborn Catplot绘制耗时超10分钟,如何优化提升运行速度?

Seaborn catplot 绘图耗时过长优化方案

核心原因

你当前使用的catplot是Seaborn的FacetGrid级封装函数,自带大量分面布局相关的额外计算,且未显式指定参数时,函数默认执行的分类推断、散点抖动计算、大量刻度的自动布局操作都会被563个城市分类放大,最终导致耗时异常。另外Matplotlib渲染默认是单线程执行,所以不会占满CPU资源,属于正常现象。

可落地优化方法

  • 替换为Axes级绘图函数,去掉不必要的FacetGrid开销
    你没有分面需求,完全不需要使用catplot,直接使用底层的stripplot/barplot即可,代码示例:
    import matplotlib.pyplot as plt
    import pandas as pd
    import seaborn as sns
    
    # 提前将City转为分类类型,避免Seaborn运行时推断排序
    # 如果需要按特定顺序排序,可自定义categories参数
    city_lit_rate_long['City'] = pd.Categorical(city_lit_rate_long['City'], ordered=True)
    
    # 直接用Axes级函数绘图,替换catplot
    fig, ax = plt.subplots(figsize=(10, 5)) # 对应你之前的height=5,aspect=2参数
    sns.stripplot(
        data=city_lit_rate_long, 
        y='City', 
        x='Literacy Levels', 
        hue='Legend',
        jitter=0, # 每个分组只有1个数据点,无需抖动计算
        dodge=0.2, # 分组偏移宽度,可按需调整
        ax=ax
    )
    ax.legend(loc='best')
    plt.tight_layout()
    
  • 关闭不必要的自动计算特性
    若仍需使用catplot,可添加以下参数减少无效计算:
    plot=sns.catplot(
        data=city_lit_rate_long,
        y='City', 
        x='Literacy Levels', 
        hue='Legend',
        height=5,
        aspect=2,
        legend=True, 
        legend_out=False,
        jitter=0, # 关闭抖动计算
        dodge=0.2
    )
    
  • 更换Matplotlib渲染后端
    Jupyter环境默认的inline后端渲染大量分类标签时效率较低,可在绘图前运行魔法命令切换到更快的后端:
    # 非交互式渲染,适合直接导出图片
    %matplotlib agg
    # 如需交互式查看可使用qt/osx后端,需提前安装对应依赖
    # %matplotlib qt
    
  • 调整渲染精度
    不需要高清矢量图时,可降低渲染dpi进一步提速:
    plt.rcParams['figure.dpi'] = 100
    

以上优化全部落地后,绘图耗时可降至2秒以内。

内容的提问来源于stack exchange,提问作者geoabram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:54:00