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.