Ggplot2'deki ekstra efsaneleri kaldırın


92

Kullanarak birleşik bir çizgi ve nokta çizimi yapmaya çalıştığım basit bir veri çerçevem ​​var ggplot2. Verilerimin şöyle göründüğünü varsayarsak:

df <- data.frame(x=rep(1:10,2), y=c(1:10,11:20), 
                 group=c(rep("a",10),rep("b",10)))

Ve bir komplo kurmaya çalışıyorum:

g <- ggplot(df, aes(x=x, y=y, group=group))
g <- g + geom_line(aes(colour=group))
g <- g + geom_point(aes(colour=group, alpha = .8))
g

Sonuç, bir istisna dışında iyi görünüyor. Bu gösteren fazladan bir efsane vardır alphabenim için geom_pointkatmanın.

<code> geom_point </code> şeffaflığı için Ek Açıklamalar

Göstergenin grup renklerini göstermesini ancak alfa ayarlarımı göstereni göstermemesini nasıl sağlayabilirim?

Yanıtlar:


173

Estetik, bir çağrı içinde ayarlanabilir veya haritalanabilirggplot .

  • İçinde tanımlanan bir estetik aes(...)bir eşlenen verilerden ve gösterge oluşturulur.
  • Bir estetik, dışarıda tanımlanarak da tek bir değere ayarlanabiliraes() .

Bu durumda, ayarlamak alpha = 0.8 ve haritalamak istediğiniz görünür colour = group.

Bunu yapmak için,

Yerleştirin alpha = 0.8dışında aes()tanımını.

g <- ggplot(df, aes(x = x, y = y, group = group))
g <- g + geom_line(aes(colour = group))
g <- g + geom_point(aes(colour = group), alpha = 0.8)
g

görüntü açıklamasını buraya girin

Herhangi bir eşlenmiş değişken için guide = 'none', uygun scale_...çağrıda kullanarak bir göstergenin görünümünü bastırabilirsiniz . Örneğin.

g2 <- ggplot(df, aes(x = x, y = y, group = group)) + 
        geom_line(aes(colour = group)) +
        geom_point(aes(colour = group, alpha = 0.8))
g2 + scale_alpha(guide = 'none')

Aynı arsa döndürecek

EDIT @ Joran'ın yorumu yerinde, cevabımı daha kapsamlı hale getirdim


18
Bu doğru yöntemdir, çünkü OP bir estetiği haritalamaktan çok ayarlıyor, ancak genel olarak herhangi bir efsanenin görünümünü gibi bir şey kullanarak bastırabilirsiniz g + scale_alpha(guide = "none").
joran

Aslında. Cevap detaylandırıldı. Yalnızca OP konusuna özgü değil, kapsamlı bir cevaba sahip olmak daha mantıklıdır.
mnel

4
Eklenen açıklama için çok teşekkürler. Bu, ggplot felsefesini anlamama yardımcı olmak için uzun bir yol kat ediyor.
Wilduck

2
Bir yıldan fazla bir süredir ggplot kullanıyorum ve eşlenmiş veya ayarlanmış değişken arasındaki farkı ASLA anlamadım. Bu şimdiye kadar gördüğüm en iyi SO cevabı, tebrikler.
Amit Kohli

1
@theforestecologist Bunun nedeni, groupestetiğin kendi başına herhangi bir ölçek veya kılavuz oluşturmamasıdır. Her zaman başka bir şeyi değiştirir. "Grup" estetiği için asla bir efsaneye sahip olamazsınız.
joran

42

show.legend = FKodu istemediğiniz bölümün arkasına eklemeniz yeterlidir.

g <- ggplot(df, aes(x=x, y=y, group=group))
g <- g + geom_line(aes(colour=group))
g <- g + geom_point(aes(colour=group, alpha = .8), show.legend = F)

1
Bu, haritalamaya karşı estetikten çok daha sezgiseldir (ancak bu da birçok yanlış anlaşılmayı ortadan kaldırır)
Wassadamo

1

Ggplot2'nin eski sürümleri için (0.9.2'den önceki sürümler, 2012'nin sonlarında piyasaya sürüldü), bu yanıt işe yaramalıdır:

Bunu a ile denedim colour_scaleve işe yaramadı. colour_scale_hueÖğenin varsayılan parametreye sahip bir işlev gibi çalıştığı görülmektedir TRUE. Ekledim scale_colour_hue(legend=FALSE)ve işe yaradı.

Ggplot'taki tüm renk ölçeği öğeleri için durumun bu olup olmadığından emin değilim


3
legendBir scale_*aramada kullanmak artık daha iyi scale_colour_hue(guide = "none").
Gregor Thomas

3
legend=FALSE@shujaa yorumunda belirtildiği gibi, kullanımdan kaldırıldığını hesaba katarak, bu etkili bir şekilde yinelenen bir cevaptır, yani guide = "none"bir scale_fill/color*işleve eklemek için .
David LeBauer
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.