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
相关产品推荐
相关产品推荐

