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

解决Matplotlib中XGBoost特征重要性图Y轴标签重叠问题

解决XGBoost特征重要性图Y轴标签重叠的问题

我太懂这种烦恼了!当特征数量超过二三十个的时候,XGBoost默认的plot_importance确实会把Y轴标签挤得乱七八糟,而且直接加figsize参数根本不生效——因为这个函数本身不会直接接收这个参数,得换个姿势来设置画布。给你几个亲测有效的解决办法:

  • 自定义画布+传入轴对象(核心解决办法)
    先通过plt.subplots创建一个足够大的画布,把生成的轴对象传给plot_importance,这样figsize就能生效了,同时还能直接调整标签字体大小:

    import matplotlib.pyplot as plt
    from xgboost import plot_importance
    
    # 根据特征数量调整画布尺寸,40个变量建议把高度设大一些
    fig, ax = plt.subplots(figsize=(10, 18))
    # 绘制特征重要性,同时缩小Y轴标签字体,避免重叠
    plot_importance(xgb_model, ax=ax, ylabel_size=7, xlabel_size=9)
    # 自动调整布局,防止标签被画布边缘截断
    plt.tight_layout()
    plt.show()
    

    这里的关键是把ax参数传进去,让plot_importance在我们指定的画布上绘图,这样就能彻底解决figsize无效的问题。

  • 只展示Top N个核心特征
    如果不是所有40个特征都需要展示,可以用max_num_features参数只保留最重要的前N个,瞬间让图表清爽起来:

    plot_importance(xgb_model, max_num_features=25, ylabel_size=9)
    plt.tight_layout()
    plt.show()
    
  • 旋转Y轴标签调整排版
    要是不想缩小字体,还可以把Y轴标签旋转一定角度并调整对齐方式,让标签之间的空间更充足:

    fig, ax = plt.subplots(figsize=(10, 18))
    plot_importance(xgb_model, ax=ax)
    # 旋转标签30度,右对齐,同时缩小字体
    ax.set_yticklabels(ax.get_yticklabels(), rotation=30, ha='right', fontsize=7)
    plt.tight_layout()
    plt.show()
    
  • 切换为水平条形图
    把条形图方向改成水平,让特征标签放在X轴上,这种排版对于大量特征来说可能更友好:

    fig, ax = plt.subplots(figsize=(18, 10))
    # 设置orientation='horizontal'切换为水平条形图
    plot_importance(xgb_model, ax=ax, orientation='horizontal', xlabel_size=7)
    plt.tight_layout()
    plt.show()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:30:58