Skip to main content
 首页 » 编程设计

python之Matplotlib 箱线图宽度(对数刻度)

2025年05月04日15tintown

我正在尝试绘制具有对数 x 轴的箱线图。正如您在下面的示例中看到的那样,每个框的宽度由于缩放而减小。有没有办法让所有盒子的宽度都一样?

请您参考如下方法:

您可以根据图上的位置设置框的特定宽度。 boxplot 的 width 参数允许设置不同的宽度。要计算相应的宽度,您需要将位置转换为线性比例,加上或减去一些线性宽度,然后转换回对数比例。因此获得的两个值之间的差异是要设置的条的宽度。

这里使用的线性宽度 w 当然是任意的;您需要为自己选择一个好的值。

import matplotlib.pyplot as plt 
import numpy as np; np.random.seed(42) 
 
a = np.cumsum(np.random.rayleigh(150, size=(50,8)), axis=1) 
 
fig, ax=plt.subplots() 
 
positions=np.logspace(-0.1,2.6,8) 
 
w = 0.1 
width = lambda p, w: 10**(np.log10(p)+w/2.)-10**(np.log10(p)-w/2.) 
 
ax.boxplot(a, positions=positions, widths=width(positions,w)) 
ax.set_xscale("log") 
plt.show()