Matplotlib/seaborn绘制图表如何移动坐标轴至边框消除外侧留白
matplotlib多子图布局留白消除方案
这个需求完全可实现,你图里的两类留白分别是布局参数默认值、坐标轴距边距默认值导致的,按以下步骤修改即可:
- 消除最外层(红色箭头标注)的画布边缘留白
你当前用的plt.subplots_adjust(wspace =0, hspace =0)仅控制子图之间的横纵间距,没有设置画布边缘到子图区域的距离,补全四个边缘参数即可。如果要给X轴刻度预留显示空间,bottom参数不要设为0,留0.06~0.1的空间足够:plt.subplots_adjust(wspace=0, hspace=0, left=0, right=1, top=1, bottom=0.08) - 消除主图和头尾信息块之间(蓝色箭头标注)的网格空行
你当前的网格布局里留了两处无意义空行:- 头部信息块只占第0、1两行,主图却从第3行开始,中间空了第2行
- 主图占17行,从第3行起始的话到第20行就结束,你设置的footer起始行是
mainChartRowspan+4=21,中间又空了1行
直接修改两处参数即可:
# 主图起始行从3改为2,紧贴头部信息块 plotAxis = plt.subplot2grid(gridShape, (2, 0), colspan=6, rowspan=mainChartRowspan) # 底部块起始行偏移从+4改为+2,紧贴主图底部 footerStartRow = mainChartRowspan+2 - 消除主坐标轴内部内容和边框的默认间隙
matplotlib默认会给坐标轴内的绘图区域留5%的边距,防止内容贴边,要实现参考图的贴边效果,直接给主绘图轴把边距设为0即可:# 如需保留Y轴方向的边距,可将y参数设为0.05这类小值 plotAxis.margins(x=0, y=0)
改完之后所有子图块会完全铺满画布,主图内容也会和坐标轴边框对齐,和你提供的参考效果一致。
内容的提问来源于stack exchange,提问作者moys
相关产品推荐
相关产品推荐

