在对数刻度下调整Matplotlib箱线图的宽度

6

我想绘制一个具有对数x轴的箱线图。如下面的示例所示,由于比例尺的缘故,每个框的宽度都会减小。有没有办法使所有框的宽度相同?

enter image description here


1
我认为你应该添加你的代码。 - Brown Bear
1
不仅仅是你的代码,而是一个最小、完整和可验证的示例 - DavidG
1
这个问题是关于条形图的,相当于之前提到的设置两个坐标轴为对数坐标的问题。 - ImportanceOfBeingErnest
1个回答

12

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

这里使用的线性宽度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()

在此输入图片描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接