ggplot2'de iki sütunla gruplandır


91

İki sütuna göre gruplamak mümkün mü? Yani Çapraz ürün ile çizilir geom_point()ve geom_smooth()?

Örnek olarak:

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

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

Öyle ki bir grupla puan paylaşır 6ve 12paylaşmaz 3.

Yanıtlar:


32

Neden sadece pastebu iki sütun bir arada ve bu değişkeni gruplar olarak kullanmıyor ?

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

Bunu yapmanın biraz daha resmi bir yolu, işlevi kullanmak olacaktır interaction.


27
Bence data.framebir olay örgüsü amacıyla değiştirmemelisin . plotSenin df değil tersi çizmek gerekir.
ClementWalter

3
Katılıyorum, Blue Magister'ın cevabı daha iyi.
Jeston

6
@clemlaflemme BlueMagister'ın cevabının iyi olduğunu düşünüyorum, ancak bu durumdaki ayrımın oldukça küçük olduğunu düşünüyorum. Ancak, veri çerçevenizi bir çizim için değiştirmemesi gereken genel konum , tüm tasarımı verilerinizi ggplot'un anlambilimiyle çalışmak üzere açıkça yapılandırmaya dayanan ggplot2'yi kullanma seçiminize verilen ilginç bir konumdur.
joran

Bunun bir dezavantajı, pastegirdi bir faktör olduğunda interaction, orijinal faktörlerin sırasını koruduğu seviyeleri atmasıdır . Bu, grupların interactionyaklaşımla daha doğal bir şekilde sıralandığı anlamına gelir .
Kota Mori

174

Bu sorudan örnek alarak, interactioniki sütunu yeni bir faktörde birleştirmek için kullanarak :

# 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 örneği


Bu benim için çalışıyor:ggplot(df) + geom_violin(aes(class1, metric.var, group = interaction(class1, class2)), position = position_dodge(width=.5))
ivan866

59

Örneğin:

 qplot(round, price, data=firm, group=id, color=id, geom='line') +  
      geom_smooth(aes(group=interaction(size, type)))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.