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

如何去除Matplotlib分组柱状图中的空白区域?图表尺寸3.5x4英寸

去除Matplotlib分组柱状图空白区域的解决方案

嘿,针对你这个分组柱状图的空白问题,我有几个实用的方法可以帮你搞定,结合你的代码给你具体的修改方案:

方法1:手动调整x轴范围,精准包裹柱子

你的分组里每个有6个柱子,每个宽度0.05,所有柱子的覆盖范围是从index到index+0.25。要去掉左右空白,我们可以让x轴刚好贴合所有柱子的边缘。在绘制完所有rects之后,添加这段代码:

# 设置x轴范围,刚好包裹所有柱子
plt.xlim(index[0] - bar_width/2, index[-1] + 0.25 + bar_width/2)

这样x轴左右两侧就不会留下多余的空白了。

方法2:自动调整布局(快速省心)

Matplotlib的tight_layout()函数可以自动调整子图的边距和元素间距,帮你去掉上下左右的不必要空白,还能避免标签被截断。在绘制完所有元素后加上:

plt.tight_layout()

这个方法属于一键式优化,适合快速解决大部分空白问题。

方法3:手动微调边距(精细控制)

如果你需要更精细化的布局控制,可以用subplots_adjust()手动设置上下左右的边占比,比如:

# 调整边距,数值越小空白越少,根据实际显示效果调整
plt.subplots_adjust(left=0.05, right=0.95, top=0.95, bottom=0.05)

参数范围是0到1,代表边距占整个画布的比例,比如left=0.05就是左边只留5%的空白。

整合后的完整代码示例

把这些方法结合到你的代码里,大概是这样:

import matplotlib.pyplot as plt
import numpy as np

# 假设你已经定义好以下变量
n_groups = 3
SeriesA_1 = [1,2,3]
SeriesA_2 = [2,3,4]
SeriesA_3 = [3,4,5]
SeriesB_1 = [4,5,6]
SeriesB_2 = [5,6,7]
SeriesB_3 = [6,7,8]

fig= plt.figure(figsize=(3.5,4),dpi=600)
index = np.arange(n_groups)
bar_width = 0.05
rects1 = plt.bar(index, SeriesA_1, bar_width)
rects2 = plt.bar(index + 0.05, SeriesA_2, bar_width)
rects3 = plt.bar(index + 0.10, SeriesA_3, bar_width)
rects4 = plt.bar(index + 0.15, SeriesB_1, bar_width)
rects5 = plt.bar(index + 0.20, SeriesB_2, bar_width)
rects6 = plt.bar(index + 0.25, SeriesB_3, bar_width)

# 调整x轴范围,贴合柱子边缘
plt.xlim(index[0] - bar_width/2, index[-1] + 0.25 + bar_width/2)

# 自动优化布局,减少空白
plt.tight_layout()

# 可选:手动微调边距(按需使用)
# plt.subplots_adjust(left=0.05, right=0.95, top=0.95, bottom=0.05)

plt.show()

你可以根据实际显示效果调整参数,比如xlim的缓冲值或者subplots_adjust的边距数值,直到得到你想要的无空白布局。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:55:31