2016-03-26 24 views
1

私は、ggplot2ボックスプロットをgeom_linesと複数の要因で接続しようとしています。私はこれまで、すべてのボックスプロットを線で結ぶことができました。写真を添付し​​てください。しかし、唯一のボックスプロットを対応する要素で接続したいと考えています。私の変数FLため例えばggplotボックスプロットを線と複数の因子を使って接続する

enter image description here

、私は残りの変数とそれらを接続することなく、のみ2箱ひげ図を接続したいです。同様に、変数RWについては、残りの他のものを除いて、これらの2つの性別のボックスプロットを接続します。

library("MASS") 
data(crabs) 
melt_crabs <- melt(crabs,id.var=c("sp","sex","index")) 
ggplot(melt_crabs, aes(x = variable, y = value)) + geom_line(aes(group = index), size = 0.05, alpha = 0.7) + geom_boxplot(aes(fill = sp), alpha = 0.5) + facet_grid(sex~.) 

誰でもこの方法を知っていますか?私は自分に最も明確な方法を説明したいと思う。

多くの感謝と最高の願い、

+0

あなたのコードは、あなたが示す数字を生成しません。私はあなたが単にセックスとspを交換したと思います。 – Stibu

+0

@Stibu返信してコードを編集してくれてありがとう。私はこれで新しく、私はそれが私の謝罪を表明したと思った。性別および性別の使用はインパクトではありません。ここでの例は、同じ要素に2つのboxplotを置き、それらを接続することです。どうもありがとう。 –

答えて

1

間違いなくあなたの所望の出力を得るための最も迅速かつクリーンな方法です。与えられた変数については、プロットが互いに隣り合っていないので、それぞれのプロットにそれぞれのプロットを入れたいと思うかもしれません。これは、簡単に@ Stibuのコードでfacet_gridコールへのわずかな微調整することによってすることができます。

ggplot(melt_crabs, aes(x = interaction(sex, variable), y = value)) + 
    geom_boxplot(aes(fill = sex), alpha = 0.5) + 
    geom_line(aes(group = interaction(index, variable)), 
      alpha = 0.5, colour = "darkgrey") + 
    facet_grid(sp~variable,scales="free_x") + 
    scale_x_discrete(labels = "") 

enter image description here

また、私はいくつかの掘削あなたが上から下にストリップを移動したいなかった場合、それはにISNそれは難しい。コードを適応:How to display strip labels below the plot when faceting?

我々が得る:

p<-ggplot(melt_crabs, aes(x = interaction(sex, variable), y = value)) + 
    geom_boxplot(aes(fill = sex), alpha = 0.5) + 
    geom_line(aes(group = interaction(index, variable)), 
      alpha = 0.5, colour = "darkgrey") + 
    facet_grid(sp~variable,scales="free_x") + 
    scale_x_discrete(labels = "") 

# Convert the plot to a grob 
gt <- ggplotGrob(p) 

# Get the positions of the panels in the layout: t = top, l = left, ... 
panels <-c(subset(gt$layout, name == "panel", select = t:r)) 

# Get the strip grob & x-axis label grob 
stripGrob = gtable_filter(gt, "strip-top") 

#Replace x-axis ticks with strip 
gt = gtable_add_grob(gt, stripGrob, t = max(panels$b)+1, l = min(panels$l), r = max(panels$r)) 

# remove the old strip 
gt = gt[-(min(panels$t)-1), ] 

grid.newpage() 
grid.draw(gt) 

enter image description here

+0

ご協力いただきありがとうございます。 interact()関数の使用は、私が必要としていたものでした。 多くのありがとうと最高の願い! –

+1

ファセットを使用する優れたアイデア!この状況では、実際には 'x = interaction(sex、variable)'の必要はもうなくなり、 'x = sex'だけ使うことができます。あなたのプロットを正確に再現することはできません。どのバージョンのggplot2を使用していますか?最新のバージョンでは、 'facet_grid()'の 'switch =" x "'を使ってファセットラベルを一番下に移動することができます。これは、あなたの亜種と同じくらい美しいものではありません。 'scale_x_discrete(labels = NULL、breaks = NULL)'ではより良い結果が得られますが、あなたのソリューションはもっと美しく見えます。 – Stibu

+0

私はこの例でバージョン1.0.1を使用していました...少し日付がつきました。しかし、私は 'facet_grid()'の 'switch =" x "'機能について知りませんでしたが、これは明らかに同様の出力を得るより速い方法です。ありがとう!また、私はggplot2と最新のRバージョンの最新バージョンをインストールしました。同じコードが私のために働いているようですが、私たちが使用しているグリッドバージョンが異なるかもしれません。私はバージョン0.2.0を使用しています。 –

3

私はあなたが作成正確にプロット内のポイントを接続する方法を知りません。しかし、私はあなたに似たようなことをする方法を示すことができます。

ペアボックスプロットのに属するすべての点が同じx座標(つまり、variableと同じ値)を共有するのは難しいです。したがって、私はinteraction(sex, variable)をx座標として使用しました。その結果、各ボックスプロットは独自のx値を持ちます。しかし、これは対になったボックスプロットが目立たないことを意味します。一方、接続線は他の方向に作用する。

線をプロットするために、それらはindexvariableための同じ値を共有する場合、データポイントが接続されていることを意味し、interaction(index, variable)によってグループ化されます。

十分な話、ここにコードがある:Stibuの答え@

ggplot(melt_crabs, aes(x = interaction(sex, variable), y = value)) + 
    geom_boxplot(aes(fill = sex), alpha = 0.5) + 
    geom_line(aes(group = interaction(index, variable)), 
       alpha = 0.5, colour = "darkgrey") + 
    facet_grid(sp~.) + 
    scale_x_discrete(labels = rep(levels(melt_crabs$variable), each = 2)) 

enter image description here