2012-07-05 74 views
2

這裏是我想繪製的一個小例子(2組和2子組,僅僅爲了簡單,但是我可能有n組和k子組)。使用r縮放水平和垂直線/刻度圖(地圖)使用r

grp <- c( 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,2, 2, 2,2, 2, 2, 2, 2) 
sgrp <- c("A", "A", "A", "A", "A", "B", "B", "B", "B" , "A", "A", "A", "A", 
    "B", "B", "B", "B", "B") 
pos <- c(1.1, 2.1, 3.2, 4.1, 5.0,1.1, 2.0, 5.0, 6.2,1.0, 3.0, 4.1, 5.0,1.0, 
2.1, 3.01, 4.0, 5.02) 
mydf <- data.frame (grp, sgrp, pos) 
    grp sgrp pos 
1 1 A 1.10 
2 1 A 2.10 
3 1 A 3.20 
4 1 A 4.10 
5 1 A 5.00 
6 1 B 1.10 
7 1 B 2.00 
8 1 B 5.00 
9 1 B 6.20 
10 2 A 1.00 
11 2 A 3.00 
12 2 A 4.10 
13 2 A 5.00 
14 2 B 1.00 
15 2 B 2.10 
16 2 B 3.01 
17 2 B 4.00 
18 2 B 5.02 

名次判定其中蜱需要在x軸。中心線(長線)從零開始到grp + 1的最大位置結束。是否可以製作這樣的圖形?

最終圖表應該什麼樣子:

enter image description here

編輯: 這裏有個小竅門,我可以做,但沒有達到(不關閉)我想做什麼:

dgp <- c(0, 0, 0, 0, 0, 0.15, 0.15,0.15, 0.15 , 0, 0, 0, 0, 
0.15, 0.15, 0.15, 0.15, 0.15) 
mydf$dumv <- grp + dgp 
plot(mydf$pos, mydf$dumv, pch = "+", ylab = "groups", xlab = "pos") 

enter image description here

再次更新:,有一些想法,但問題的存在:

require(ggplot2) 

grp <- c( 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,2, 2, 2,2, 2, 2, 2, 2) 
sgrp <- c("A", "A", "A", "A", "A", "B", "B", "B", "B" , "A", "A", "A", "A", 
    "B", "B", "B", "B", "B") 
position <- c(1.1, 2.1, 3.2, 4.1, 5.0,1.1, 2.0, 5.0, 6.2,1.0, 3.0, 4.1, 5.0,1.0, 
2.1, 3.01, 4.0, 5.02) 
mydf <- data.frame (grp, sgrp, pos) 
dgp <- c(0, 0, 0, 0, 0, 0.15, 0.15,0.15, 0.15 , 0, 0, 0, 0, 
0.15, 0.15, 0.15, 0.15, 0.15) 
mydf$barheight <- c(0.25) 
mydf$group <- grp + dgp 

ggplot(mydf) + 
    geom_line(aes(position, factor(group), group = factor(group)), 
      size = 2, colour = "purple") + 
    geom_rect(aes(y = factor(group), 
       xmin = position - 0.02, 
       xmax = position + 0.02, 
       ymin = group - barheight/2, 
       ymax = group + barheight/2)) 

問題:.... (1)我不能讓組非要素,矩形現在的位置是放錯了地方,我希望把A,B旁邊彼此之間1和2之間的差距。

(2)在實際數據中,我將有兩個以上的組,我可以自動計算dgp。

enter image description here

+0

它肯定聽起來像你問我們,使這個圖形_for_你。一般來說,SO的目的是回答你遇到的具體問題,同時試圖自己編寫代碼。你能告訴我們到目前爲止你有多遠? – joran 2012-07-05 18:43:33

+0

@joran對不起,如果它出現這樣,和我有限的知識...看到的點,我可以作爲編輯...沒有錯誤消息報告,除非我知道如何做下一步... – fprd 2012-07-05 19:00:35

+0

I希望看到ggplot解決方案... – fprd 2012-07-06 10:30:07

回答

3
plot(NULL, ylim=c(0,4), xlim=range(mydf$pos)) 
abline(h=1:4 ,col=1:2) 
with(mydf, segments(x0=pos, y0=as.numeric(interaction(mydf$grp, mydf$sgrp))-.2, 
        y1=as.numeric(interaction(mydf$grp, mydf$sgrp))+.2, 
        col= mydf$grp, lty=as.numeric(mydf$sgrp))) 

(我還不是ggplot用戶,所以這是基礎的圖形,你可以調整ylim並添加ylab說法正確標註。您可能還需要使用yaxt="n"axis()標記的組和子組。) enter image description here

下面是使用的交互值從垂直位置的矢量挑替代設置。

plot(NULL, ylim=c(0.5,4.5), xlim=range(mydf$pos)) 
with(mydf, segments(x0=pos, 
      y0=c(1.3,1.7,3.3,3.7)[as.numeric(interaction(mydf$grp, mydf$sgrp))]-.1, 
      y1=c(1.3,1.7,3.3,3.7)[as.numeric(interaction(mydf$grp, mydf$sgrp))]+.1, 
      col= mydf$sgrp, lty=as.numeric(mydf$grp))) 
abline(h=c(1.3,1.7,3.3,3.7) ,col= rep(1:2, each=2), lty=1:2,lwd=3) 

enter image description here

+0

非常感謝解決方案,有一些問題,例如從數據的條/線長度(水平)和條(A和B)旁邊的比較comparision.however I將繼續工作.. – fprd 2012-07-05 20:14:21

+0

您可以通過適當減少'abline'中的'h'參數和'segments'中的'y0'和'y1'參數來調整條(和蜱)。顏色應該由'sgrp'驅動。 – 2012-07-05 20:27:07