2017-10-11 78 views
0

我想繪製一個對數x軸的boxplot。正如你在下面的例子中看到的那樣,每個盒子的寬度因規模而減少。有沒有辦法讓所有盒子的寬度相同?Matplotlib boxplot對角線寬度

enter image description here

+1

我想你應該添加代碼 –

+1

不只是你的代碼,但[最小,完整,可驗證的示例](http://stackoverflow.com/help/mcve)。 – DavidG

+1

[這個問題](https://stackoverflow.com/questions/44068435/setting-both-axes-logarithmic-in-bar-plot-matploblib)將相當於條形圖。 – ImportanceOfBeingErnest

回答

2

您可以設置根據對劇情的位置箱的具體寬度。 boxplot的參數width允許設置不同的寬度。要計算相應的寬度,您需要將位置轉換爲線性比例,添加或減去一些線性寬度,然後轉換回對數比例。兩個因此獲得的值之間的差異是要設置的條的寬度。

線性寬度01​​當然在某種程度上是任意的;你需要爲自己選擇一個好的價值。

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() 

enter image description here

+0

這正是我所期待的。非常感謝。 – Tomas