ggplot2の2列でグループ化


90

2列でグループ化することはできますか?したがって、外積はgeom_point()and によって描画されgeom_smooth()ますか?

例として:

frame <- data.frame(
 series <- rep(c('a', 'b'), 6), 
 sample <- rep(c('glass','water', 'metal'), 4), 
 data <- c(1:12))

ggplot(frame, aes()) # ...

そのようなポイント612グループを共有し3ますが、ではありません。

回答:


32

なぜpasteこれら2つの列だけを一緒にして、その変数をグループとして使用ないのですか?

frame$grp <- paste(frame[,1],frame[,2])

これを行うためのやや正式な方法は、関数を使用することinteractionです。


27
私はあなたがdata.frameプロットの目的のためにあなたを修正するべきではないと思います。plotあなたのDFはなく、反対をプロットする必要があります。
ClementWalter 2016年

3
私は同意します、Blue Magisterの答えはより良いです。
ジェストン

6
@clemlaflemme BlueMagisterの答えはすばらしいと思いますが、この場合の違いはごくわずかです。しかし、プロットのデータフレームを変更してはいけないという一般的な位置は、ggplot2を使用するという選択を考えると奇妙なものです。その全体的な設計は、データを明示的に構造化してggplotのセマンティクスで機能することを前提としています。
joran

の欠点pasteは、入力が因子の場合、レベルを破棄しinteraction、元の因子の順序を維持することです。これは、グループがinteractionアプローチによってより自然に順序付けられることを意味します。
森幸太

168

この質問から例をとると、を使用interactionして2つの列を新しい因子に結合します。

# Data frame with two continuous variables and two factors 
set.seed(0)
x <- rep(1:10, 4)
y <- c(rep(1:10, 2)+rnorm(20)/5, rep(6:15, 2) + rnorm(20)/5)
treatment <- gl(2, 20, 40, labels=letters[1:2])
replicate <- gl(2, 10, 40)
d <- data.frame(x=x, y=y, treatment=treatment, replicate=replicate)

ggplot(d, aes(x=x, y=y, colour=treatment, shape = replicate,
  group=interaction(treatment, replicate))) + 
  geom_point() + geom_line()

ggplotの例


これは私にはggplot(df) + geom_violin(aes(class1, metric.var, group = interaction(class1, class2)), position = position_dodge(width=.5))
有効

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.