如何调整Matplotlib图表尺寸并缩小左右边距以优化显示?
解决Matplotlib图表狭窄及边距过宽的问题
核心问题定位
你使用plt.subplot(132)创建子图,这是1行3列布局里的第二个子图,左右两侧会自动预留第一和第三个子图的空白区域,这是边距过宽的主要原因。如果不需要多子图布局,直接删除该语句即可解决大部分问题。
具体调整方案
1. 移除多余的子图布局
删除plt.subplot(132),直接在默认单图上绘制,避免预留不必要的子图空间。
2. 精准压缩边距
- 使用
plt.tight_layout():自动调整元素间距和边距,让图表内容适配画布 - 手动设置边距:用
plt.subplots_adjust()自定义边距参数,数值范围0-1(对应画布相对位置),数值越小边距越窄:plt.subplots_adjust(left=0.05, right=0.95, top=0.9, bottom=0.1)
3. 优化图表可读性
- 调整x轴标签角度,避免重叠:
plt.xticks(rotation=45, ha='right') - 增大marker内数值的显示尺寸:调大
s参数(比如s=400),或者用plt.text()替代scatter的marker,更灵活控制字体:for x, name, val in zip(range(len(values)), names, values): plt.text(name, val, str(val), ha='center', va='center', fontsize=12, color='black')
完整优化代码示例
import matplotlib.pyplot as plt names = ['VCI', 'FRI', 'QII', 'VSI', 'WMI', 'PSI', 'GAI', 'CPI', 'FSIQ'] values = [102, 129, 129, 160, 149, 128, 134, 120, 118] plt.figure(figsize=(12, 6)) # 设置合适的画布尺寸 # 直接绘制,移除subplot布局 for x in range(len(values)): plt.scatter(names[x], values[x], marker="$"+str(values[x])+"$", color="black", s=400) plt.plot(names[:6], values[:6], color='black', linestyle='dashed') # 匹配x轴标签,避免线条错位 plt.yticks(ticks=range(40, 181, 10)) # 简化刻度写法 plt.minorticks_on() plt.tick_params(axis='x', which='minor', bottom=False) plt.xticks(rotation=45, ha='right') # 优化x标签显示 plt.tight_layout() # 自动压缩边距 plt.show()
额外提示
如果需要保存图表,使用plt.savefig()时加上bbox_inches='tight',进一步消除保存时的边距:
plt.savefig('chart.png', bbox_inches='tight', dpi=300)
内容的提问来源于stack exchange,提问作者Rithvik Shetty
相关产品推荐
相关产品推荐

