2014-07-23 48 views
0

我有一堆2d點和角度。爲了顯示我想要使用箱線圖的移動量並將這些差值繪製到點的平均值上。Boxplot上的距離數據 - 設置框手動值

我成功地可視化使用python和matplotlib在下面的箱線圖的角度抖動: enter image description here

現在我想爲我的位置數據做同樣的。在計算歐幾里德距離後,所有的數據都是正的,所以一個天真的盒子會給出錯誤的結果。對於示例,請參見底部的盒形圖,剛好位於均值上的點的距離爲零,現在是異常值。

所以我的問題是:

我怎麼可以手動設置框的下端和鬍鬚到零? 如果我應該像一個柱狀圖,請告訴我另一種方法(我想用但相同的樣式)

編輯: 它類似於目前在下圖(這個距離的積角度有他們的意思)。 正如你所看到的boxplot不覆蓋零。這對於數據是正確的,但不是它背後的意思!零是完美的(因爲它代表的是完全位於角度中間的點),但它不包含在boxplot中。 enter image description here

+0

你能解釋一下你想要的陰謀是什麼樣子?值爲零的點不會是異常值,除非中位數遠離零,在這種情況下,boxplot將顯示爲異常值是正確的。你是否嘗試做一個距離的箱形圖?它以什麼方式不做你想要的? – BrenBarn

+0

@BrenBarn增加了一個情節(即使我沒有在評論中叫出你的名字,你會得到一個通知嗎?) –

+0

從這個情節很難說,但是我沒有看到任何零點值。你確定實際上有零值嗎? boxplot部分的尺寸是完全算法的,並且該算法定義了boxplot的「含義」是什麼。如果你想要別的東西,也許你不想要一個boxplot,但一些自定義的box-like情節。 – BrenBarn

回答

0

我發現它在this question on SO之前已經被詢問過了。儘管不是完全相同,但另一個問題包含答案!

在matplotlib 1.4中可能是一個更快的方法來做到這一點,但現在在另一個線程中的答案似乎是最好的方式。

編輯: 事實證明,我不能使用他們的方法,因爲我有plt.boxplot(data, patch_artist=True)得到所有其他花哨的東西。

所以我不得不求助於以下醜陋的最終解決方案:

N = 12 #number of my plots 

upperBoxPoints= [] 
for d in data: 
    upperBoxPoints.append(np.percentile(d, 75)) 

w = 0.5 # i had to tune the width by hand 
ind = range(0,N) #compute the correct placement from number and width 
ind = [x + 0.5+(w/2) for x in ind] 


for i in range(N): 
    rect = ax.bar(ind[i], menMeans[i], w, color=color[i], edgecolor='gray', linewidth=2, zorder=10) 
# ind[i] position 
# menMeans[i] hight of box 
# w width 
# color=color[i] as you can see i have a complex color scheme, use '#AAAAAAA' for colors, html names won't work 
# edgecolor='gray' just like the other one 
# linewidth=2 dito 
# zorder=2 IMPORTANT you have to use at least 2 to draw it over the other stuff (but not to high or it is over your horizontal orientation lines 

而最終的結果: enter image description here

+0

你的最終結果是相當令人困惑,因爲它看起來像是帶有非常大的錯誤條的條形圖,而不是你想要溝通的東西。 – mwaskom

+0

我在文中澄清說。但它基本上是一個不平凡的問題。如果你有更好的想法如何可視化,請回答這裏:https://stackoverflow.com/questions/24905829/plotting-of-2d-jitter-data –