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

Python绘制150+个子图显示压缩问题求助

解决多列数据子图压缩问题的实用方案
  • 大幅提升画布尺寸:当前(25,16)的画布要容纳154个子图,每个子图的像素空间极小。直接按子图数量等比例放大,比如设置figsize=(40, 60),你可以根据实际显示效果调整——记住,每个子图至少需要足够的空间显示坐标轴和曲线,行数22的话,高度方向要给够,避免纵向挤压。

  • 调整子图间距与布局:放弃tight_layout(),改用plt.subplots_adjust()手动控制间距,更灵活:

    import matplotlib.pyplot as plt
    
    axes = mydata.plot(subplots=True, layout=(22,7), figsize=(40,60), sharex=True, sharey=True)
    fig = axes.flat[0].get_figure()
    # 手动设置上下左右间距,以及子图间的行列间距
    plt.subplots_adjust(left=0.05, right=0.95, top=0.95, bottom=0.05, hspace=0.3, wspace=0.2)
    

    hspace控制子图纵向间距,wspace控制横向间距,数值越大间距越宽。

  • 缩小坐标轴刻度与标签字体:大数量子图下,默认字体占比过高会挤压绘图区域,统一缩小字体:

    for ax in axes.flat:
        ax.tick_params(axis='both', labelsize=8)  # 调整刻度字体大小
        ax.set_xlabel(ax.get_xlabel(), fontsize=8)  # x轴标签
        ax.set_ylabel(ax.get_ylabel(), fontsize=8)  # y轴标签
    
  • 可选:分批次绘制子图:如果上述调整后还是不够清晰,干脆把150多列分成多组(比如每50列一组),生成多张独立的图,避免单张图承载过多内容:

    # 分3组绘制,每组50列
    for i in range(0, len(mydata.columns), 50):
        subset = mydata.iloc[:, i:i+50]
        axes = subset.plot(subplots=True, layout=(10,5), figsize=(30,40), sharex=True, sharey=True)
        fig = axes.flat[0].get_figure()
        plt.subplots_adjust(hspace=0.3, wspace=0.2)
        plt.savefig(f'subplots_group_{i//50 +1}.png', dpi=300)  # 保存高清图
        plt.close()
    
  • 保存高清矢量图/高分辨率位图:如果是导出查看,别用默认dpi,保存时设置dpi=300或更高,即使画布大,导出后放大看也清晰:

    fig.savefig('all_subplots.png', dpi=300, bbox_inches='tight')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:03:23