Skip to main content
 首页 » 编程设计

python之在条形图和 Y 轴之间添加填充

2025年05月04日10Leo_wl

我正在使用下面的代码使用 matplotlib 构建条形图。当我的第一列或最后一列数据为 0 时,我的第一列会楔入 Y 轴。

这方面的一个例子。请注意,第一列位于 x=0 点上。

如果我在该列中有数据,我会在 Y 轴和第一列之间得到一个巨大的填充,如此处所示。请注意附加柱,现在位于 X=0。如果我的最后一列中也有数据,则会重复这种效果。

我的代码如下:

import matplotlib.pyplot as plt 
import numpy as np 
from matplotlib.ticker import MultipleLocator 
 
binVals = [0,5531608,6475325,1311915,223000,609638,291151,449434,1398731,2516755,3035532,2976924,2695079,1822865,1347155,304911,3562,157,5,0,0,0,0,0,0,0,0] 
binTot = sum(binVals) 
binNorm = [] 
 
for v in range(len(binVals)): 
    binNorm.append(float(binVals[v])/binTot) 
 
fig = plt.figure(figsize=(6,4)) 
ax1 = fig.add_subplot(1,1,1) 
ax1.bar(range(len(binNorm)),binNorm,align='center', label='Values') 
plt.legend(loc=1) 
plt.title("Demo Histogram") 
plt.xlabel("Value") 
plt.xticks(range(len(binLabels)),binLabels,rotation='vertical') 
plt.grid(b=True, which='major', color='grey', linestyle='--', alpha=0.35) 
ax1.xaxis.grid(False) 
plt.ylabel("% of Count") 
plt.subplots_adjust(bottom=0.15) 
plt.tight_layout() 
plt.show() 

如何在 Y 轴和我的第一个/最后一个柱之间设置一个恒定的边距?

此外,我意识到它被标记为“演示直方图”,这是因为我在更正讨论的问题时错过了它 here .

请您参考如下方法:

我不能运行你给的代码片段,即使做了一些修改我也无法复制大空间。除此之外,如果您需要对 matplotlib 强制设置边界,您可以这样做:

ax.set_xlim( min(your_data) - 10, None ) 

第一项告诉轴将边界放在距数据最小值 10 个单位的距离处,None 参数告诉它保持当前值。

将其投入竞赛:

from collections import Counter 
from pylab import * 
data = randint(20,size=1000) 
res = Counter(data) 
vals = arange(20) 
ax = gca() 
ax.bar(vals-0.4, [ res[i] for i in vals ], width=0.8) 
ax.set_xlim( min(data)-1, None ) 
show() 

搜索 stackoverflow 我刚刚学会了一个新技巧:你可以调用

ax.margins( margin_you_desire ) 

自动让 matplotlib 在您的绘图周围放置该数量的空间。它也可以在 x 和 y 之间进行不同的配置。

在您的情况下,最好的解决方案是

ax.margins(0.01, None) 

小问题是单位是轴单位,指的是你绘图的大小,所以边距 1 将在你的绘图周围放置空间,大小与你当前的绘图一样大