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

如何调整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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 17:32:41