【问题标题】:Matplotlib boxplot width in log scale对数刻度的 Matplotlib 箱线图宽度
【发布时间】:2017-10-11 11:26:33
【问题描述】:

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

【问题讨论】:

标签: python matplotlib


【解决方案1】:

您可以根据绘图上的位置设置框的特定宽度。 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()

【讨论】:

  • 这正是我想要的。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2019-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多