2015-02-06 60 views
1

我有以下的數據幀馬克值範圍在點陣圖

ds <- data.frame(iso2c=as.factor(c(rep("AR",3),rep("BR",3),rep("DE",3),rep("US",3))), 

      region= as.factor(c(rep("LATAM",6),rep("DEVELOPED",6))), 

      year= rep(c(1979,1989,1999),4), 

      value= c(47.0 , 28.6, 20.8, 100.0, 64.2, 35.4, 16.0 , 9.0, 5.5, 15.6, 11.6, 8.6))    ) 

並希望繪製的散點圖中的數據,如下所示,

library(lattice) 
    dotplot(iso2c~value, data=ds, groups=year,pch=19,col="dark blue",cex=1.3,ylab="country") 

我想繪製爲一個線每個國家都在整個價值觀範圍內(從國家的最大值到國家的最小值)。我不能使用「type = h」,因爲它會將行從最大值繪製到零,而不是從最大值到最小值。 有什麼建議嗎?謝謝

回答

2

我認爲這樣做。餘計算出的x值的最大值和最小值的「Y」值的組內,然後使用晶格lsegments功能

dotplot(iso2c~value, groups=year, data=ds, panel = function(x,y,...) { 
          x0=sapply(split(x,y), min) 
          y0=as.numeric(unique(y))+.1 
          x1=sapply(split(x,y) ,max) 
          y1=as.numeric(unique(y)) +.1 
      panel.dotplot(x, y,...) 
      lsegments(x0,y0,x1,y1) 
          } , 
     pch=19,col="dark blue",cex=1.3,ylab="country") 

enter image description here

+0

感謝,完美地工作,我剛添加的」。 ..「參數,並調用panel.dotplot。 – user2345448 2015-02-07 11:18:38

+0

好主意。對我來說,困難的一面是,經過許多失敗的努力後,纔得到適當安排的段端點數據。我一直試圖在向參數傳遞值的過程中做到這一點,但是隻有在調用'lsegments'之前嘗試完成之後才取得成功。使用「下標」或「組」不起作用,因爲實際上只有一組下標,並且這些點都在單個面板內繪製。 – 2015-02-07 17:17:59