2

これは私がプロットしたい小さな例です(簡単にするために2つのグループと2つのサブグループですが、n個のグループとk個のサブグループがあるかもしれません)。

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

Pos は、目盛りが x 軸のどこにある必要があるかを決定します。中央の線 (長い線) はゼロから始まり、grp + 1 の最大位置で終わります。このようなグラフを作成することは可能ですか?

結果のグラフは次のようになります。

ここに画像の説明を入力

編集:これは私ができる小さなトリックですが、私がやりたいことを達成できませんでした(閉じていません):

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

ここに画像の説明を入力

再度更新:、いくつかのアイデアが得られましたが、問題が存在します:

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) グループを非因子にできない、長方形の位置が間違っている、1 と 2 の間の隙間に A、B を並べて配置したい。

(2) 実際のデータでは、2 つ以上のグループがありますが、dgp の計算を自動化できますか?

ここに画像の説明を入力

4

1 に答える 1

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追加できます。また、グループとサブグループにラベルを付けることもできます。 )ylabyaxt="n"axis()ここに画像の説明を入力してください

これは、相互作用値を使用して垂直位置のベクトルから選択する別の設定です。

 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)

ここに画像の説明を入力してください

于 2012-07-05T19:18:34.013 に答える