1

もう一度、Imは複雑なggplotに直面しました。ファセットグリッドを使用して、1つのプロット内にさまざまなプロットタイプをプロットしたいと思います。

次の例を使用して、私のポイントを明確にできることを願っています。最初の画像に似たプロットを作成したいのですが、上のプロットは2番目の画像のようになります。サブセット関数を使用してトリックをすでに見つけましたが、2つまたは3つ(または色を指定する)はもちろん、1つのプロットだけに垂直線を追加することはできません。

コード:

a <- rnorm(100)
b <- rnorm(100,8,1)
c <- rep(c(0,1),50)


dfr <- data.frame(a=a,b=b,c=c,d=seq(1:100))
dfr_melt <- melt(dfr,id.vars="d")

#I want only two grids, not three
ggplot(dfr_melt,aes(x=d,y=value)) + facet_grid(variable~.,scales="free")+
geom_line(subset=.(variable=="a")) + geom_line(subset=.(variable=="b"))

#Upper plot should look like this
ggplot(dfr,aes(x=d,y=a)) + geom_line() + geom_line(aes(y=c,color="c"))+
geom_hline(aes(yintercept=1),linetype="dashed")+
geom_hline(aes(yintercept=-2),linetype="dashed")

例1

例2

4

2 に答える 2

5

私があなたの質問を正しく理解している場合、ファセットが機能するようにするには、variable列を作成する必要があります。dfr

dfr$variable = "a"
ggplot(subset(dfr_melt, variable=="a"),aes(x=d,y=value)) +  
  facet_grid(variable~.,scales="free")+
  geom_line(data=subset(dfr_melt,variable=="a"))  + 
  geom_line(data=subset(dfr_melt, variable=="b")) + 
  geom_line(data=dfr, aes(y=c, colour=factor(c))) + 
  geom_hline(aes(yintercept=1),linetype="dashed")+
  geom_hline(aes(yintercept=-2),linetype="dashed")

私のプロットにはジグジグ線がないことに注意してください。これは私が変更したためです。

  #This is almost certainly not what you want
  geom_line(data=dfr, aes(y=c, colour="c"))

  #I made c a factor since it only takes the values 0 or 1
  geom_line(data=dfr, aes(y=c, colour=factor(c)))
  ##Alternatively, you could have
  geom_line(data=dfr, aes(y=c), colour="red") #or
  geom_line(data=dfr, aes(y=c, colour=c)) #or

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

于 2012-11-28T17:36:57.977 に答える
1

私の知る限り、facet.grid()を使用して1つのプロットに複数のプロットタイプを配置することはできません。私が見る限り、あなたの2つの選択肢は

  • 空のデータを最初のファセットに配置して、行が「そこに」あるが表示されないようにする、または

  • ビューポートを使用して複数のプロットを1つに結合します。

2番目の解決策はより一般的だと思うので、それが私がしたことです。

#name each of your plots
p2 <- ggplot(subset(dfr_melt, variable=="a"),aes(x=d,y=value)) + facet_grid(variable~.,scales="free")+
  geom_line(subset=.(variable=="a")) + geom_line(subset=.(variable=="b"))

#Upper plot should look like this
p1 <- ggplot(dfr,aes(x=d,y=a)) + geom_line() + geom_line(aes(y=c,color="c"))+
  geom_hline(aes(yintercept=1),linetype="dashed")+
  geom_hline(aes(yintercept=-2),linetype="dashed")

#From Wickham ggplot2, p154
vplayout <- function(x,y) {
  viewport(layout.pos.row=x, layout.pos.col=y)
}

require(grid)
png("myplot.png", width = 600, height = 300) #or use a different device, e.g. quartz for onscreen display on a mac
grid.newpage()
pushViewport(viewport(layout=grid.layout(2, 1)))
print(p1, vp=vplayout(1, 1))
print(p2, vp=vplayout(2, 1))
dev.off()

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

それらを正確に整列させるには、少しいじる必要があるかもしれません。上のプロットのファセットをオフにし、下のプロットの凡例を下に移動すると、うまくいくはずです。

于 2012-11-28T17:15:46.050 に答える