2014-01-13 134 views
3

我想創建一個在過去二十年裏從四個不同站點收集的數據的箱形圖(即每個站點將有20y的數據)。這將在圖上產生80個盒子。爲了使圖形清晰可辨,我希望每個框偏移,併爲每個站點設置不同的顏色框。這將產生重複的一系列框(例如,站點1,站點2,站點3,站點3,站點1,站點2,站點3,...的框)。創建boxplot不是問題;抵消箱子似乎是一個問題。例如熊貓箱線圖x軸設置

import numpy as np 
import pandas as pd 
from pylab import * 

first = pd.DataFrame(np.random.rand(10,5),columns=np.arange(0,5)) 
second = pd.DataFrame(np.random.rand(10,5),columns=np.arange(5,10)) 

fig = figure(figsize=(9,6.5)) 
ax = fig.add_subplot(111) 

box1 = first.boxplot(ax=ax,notch=False,widths=0.20,sym='',rot=-45) 
setp(box1['caps'],color='r',linewidth=2) 
setp(box1['boxes'],color='r',linewidth=2) 
setp(box1['medians'],color='r',linewidth=2) 
setp(box1['whiskers'],color='r',linewidth=2,linestyle='-') 

box2 = second.boxplot(ax=ax,notch=False,widths=0.20,sym='',rot=-45) 
setp(box2['caps'],color='k',linewidth=2) 
setp(box2['boxes'],color='k',linewidth=2) 
setp(box2['medians'],color='k',linewidth=2) 
setp(box2['whiskers'],color='k',linewidth=2,linestyle='-') 

最初我希望熊貓將索引按列名稱x軸,但熊貓似乎根據柱的位置,這是令人沮喪的被索引x軸。任何人都可以推薦一種抵消箱子的方法,這樣它們就不會彼此重疊了嗎?

回答

3

你需要指定條的位置:

box1 = first.boxplot(ax=ax,notch=False,widths=0.20,sym='',rot=-45, positions=np.arange(0.0,4.0,1.0)) 
box2 = second.boxplot(ax=ax,notch=False,widths=0.20,sym='',rot=-45, positions=np.arange(0.3,4.3,1.0)) 

或者你可以移動boxs你高興的一側(這有保持標籤的中心額外):

disp = 0.15 
for k in box1.keys(): 
    for line1,line2 in zip(box1[k],box2[k]): 
     setp(line1,xdata=getp(line1,'xdata') - disp) 
     setp(line2,xdata=getp(line2,'xdata') + disp) 
+0

謝謝xndrme,但目標是將所有內容都放在一個plot中(即同一個小區)。 – tnknepp

+0

我編輯了答案,希望它有助於:) –

+0

哦,謝謝。這很簡單! – tnknepp