2016-04-14 13 views
3

私は2つの異なる生息地タイプ(hab 1とhab 2)の間で種の分布をプロットしようとしています。私の種のいくつかは二次的にいくつかの生息地を使用しているので、私は二次的なhab1(hab1.sec)のための別の列を持っています。 2つの生息地と異なる深度にわたる分布を視覚化するために、hab1とhab2の間にfacet_gridを使用しています。以下のようなサンプルコード:既存のファセットグリッドに線分を追加するggplot r

# example code 
set.seed(101) 
ID <- seq(1,20, by=1) ## ID for plotting 
species <- sample(letters, size=20) ## arbitrary species 

## different habitat types in hab.1 
hab1 <- c("coastal","shelf","slope","open.ocean","seamount") 
hab1.pri <- sample(hab1, size = 20, replace = T) 

## secondarily used habitats, may not be present for some species 
hab.sec <- c("coastal","shelf","slope","open.ocean","seamount", NA) 
hab1.sec <- sample(hab.sec, size = 20, replace = T) 

## habitat types for hab.2 
hab2 <- c("epipelagic","benthopelagic","epibenthic","benthic") 
hab.2 <- sample(hab2, size = 20, replace = T) 

## arbitrary depth values 
dep.min <- sample(seq(0,1000), size = 20, replace = T) 
dep.max <- sample(seq(40, 1500), size = 20, replace = T) 

# make data frame 
dat <- data.frame(ID, species, hab1.pri, hab1.sec, hab.2,dep.min, dep.max) 

# ggplot with facet grid 
p <- ggplot(data=dat)+ geom_segment(aes(x=as.factor(ID),xend=as.factor(ID),y=dep.min, yend=dep.max),size=2,data = dat)+ scale_y_reverse(breaks = c(0, 200, 1000,1500))+facet_grid(hab.2~hab1.pri, scales = "free" ,space = "free")+theme_bw() 

first plot

私は既存のファセットグリッド内hab1.secためのセグメントを追加したいです。私はこのコードを試しました:

p+ geom_segment(aes(x=as.factor(ID),xend=as.factor(ID),y=dep.min, yend=dep.max),linetype=2,data = dat)+facet_wrap(~hab1.sec) 

しかしこれで新しいグラフが作成されます。

second plot

(好ましくは破線など)既存のグリッドにそれらの余分な行を追加するための良い方法はありますか? 私はこれに助けてくれて本当に感謝しています! ありがとう、事前に!

+0

[この回答](http://stackoverflow.com/a/8354731/2461552)のアプローチはここでうまくいくかもしれません。 – aosmith

+0

@aosmithに返信してくれてありがとう! 'p + facet_grid(.g、marginins = TRUE)'の部分を意味しましたか?残念ながら、それは私のために働いていませんでした.. – diya

+0

いいえ、2番目の 'geom_segment'呼び出しでデータセットから2番目のファセット変数を削除します。それはかなり簡単でしたが、あなたの最終的な結果がどのように見えていたのか分かりませんでした。 – aosmith

答えて

1

1次および2次生息地を1つの変数に結合し、その変数を美学にマッピングすることについてはどうですか?

注このような場合に役立つので、ここではtidyrdplyrツールを使用しています。

library(dplyr) 
library(tidyr) 

dat %>% 
    gather(hab1, value, -ID, -species, -(hab.2:dep.max)) %>% 
    ggplot()+ 
    geom_segment(aes(x=as.factor(ID),xend=as.factor(ID),y=dep.min, yend=dep.max, linetype=hab1),size=2) + 
    scale_y_reverse(breaks = c(0, 200, 1000,1500))+ 
    facet_grid(hab.2~value, scales = "free" ,space = "free")+ 
    theme_bw() 
+0

ちょっと@boshek、それは本当にきれいです!うん、私は2つを一緒に組み合わせたいと思ったが、どのパッケージが最適なツールになるのかわからなかった。 'reshape2'から' melt'を使ってみましたが、動作させる方法を理解できませんでした。あなたはもう少し細かいところで、 'colour'ではなく' hab1'によって 'linetype'を変更することが可能でしょうか?ありがとう、トン! – diya

+0

'colour'を' linetype'に変更するだけです。 'dplyr'と' tidyr'で時間を過ごしてください。それはあなたの人生を変えるでしょう。 – boshek

関連する問題