2012-02-27 18 views
1

ggplotとfacetingで作成した2つのプロットに矢印を追加します。問題:両方のグラフで矢印の複製を避けるにはどうすればよいですか?それぞれのプロットに個々の矢印を追加したいと思います。複数のプロットに個々の矢印を追加する

library(ggplot2) 
# data frame with fake data 
xdf <- data.frame(x=rep(1:10,2) 
        ,y=c(2*c(1:10)+rnorm(10,0,3), 4*c(1:10)+rnorm(10,0,5)) 
        ,z=rep(c("A","B"),each=10) 
       ) 
xdf 

# ggplot with faceting 
    xp <- ggplot(xdf,aes(x=x,y=y)) + 
     geom_line() + 
     facet_grid(. ~ z) 
    xp 

# location of the arrow: x=4, y= on the top 

(f1x4 <- xdf[4,"y"])+1 
xp + geom_segment(aes(x=4,xend=4,y=f1x4+3,yend=f1x4) 
         , arrow=arrow(length=unit(0.4,"cm") 
         ) 
        ) + 
     geom_text(aes(x=4,y=f1x4+5, label="a")) 

何が起こっ: はここでの例である 矢印は、同一地域で両端面に配置されます。矢印を配置する特定のプロットを選択するにはどうすればよいですか?

答えて

1

私が知る限り、個々のレイヤーをファセットに追加するには、対応するファセット値を持つデータフレームを提供する必要があります。 ggplot2 facet_grid pageから

:面取り変数が欠落しているため、

# If you combine a facetted dataset with a dataset that lacks those 
# facetting variables, the data will be repeated across the missing 
# combinations: 

だからxp + geom_segment(aes(x,xend,y,yend))を行うことは、すべての面上に描画されます。

あなたがいずれかのことができるようにあなたのファセッティング変数は、z次のとおりです。

  • は、xyをデータフレームarrow.dfを作成し、z '' は
  • ことは、直接aeszを養います。

2番目のオプションは思わ手軽:

xp + geom_segment(aes(x=4,xend=4,y=f1x4+3,yend=f1x4,z='A') # <-- see the z='A' 
         , arrow=arrow(length=unit(0.4,"cm") 
         ) 
        ) + 
     geom_text(aes(x=4,y=f1x4+5, label="a",z='A'))   # <-- see the z='A' 

だからあなただけのxpのためのデータフレームであなたのz列がレベルA「を持っているので、(その特定のパネルの上にプロットすることaes引数にfactorvariablename=factorに追加'および' B ')。

+0

ありがとうございます。これは私が欲しいものであり、ソリューションがどれほどシンプルかということを恥ずかしく思っています。 – giordano

関連する問題