2013-07-08 20 views
28

Aynı başlık, yine de soruyu tamamen reworded.geom_rect ve alpha - bu işlem kodlanmış değerler ile çalışıyor mu?

Neden alfa ilk çizimde çalışıyor, ancak ikinci değil? Sabit kodlanmış değerlerle neden rect'in doğru yerde çizildiğini ancak saydam olmadığına bakmaya çalışıyorum ama bir data.frame'de beklendiği gibi çalışıyor mu? Sorunuzu netleştirmek için

mtcars$cyl <- factor(mtcars$cyl) 
mtcars$am <- factor(mtcars$am) 

ggplot(mtcars) + 
    geom_density(aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) + 
    geom_rect(data=data.frame(xmin=100, xmax=200, ymin=0, ymax=Inf), aes(xmin=xmin, xmax=xmax, ymin=ymin,ymax=ymax), fill="red", alpha=0.2) 

ggplot(mtcars) + 
    geom_density(aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) + 
    geom_rect(aes(xmin=100, xmax=200, ymin=0,ymax=Inf), fill="red", alpha=0.2) 

cevap

56

teşekkürler. Bu benim için şaşırtıcıydı, bu yüzden google'a gittim ve learning something new'u sona erdi (örneklerinde bazı vagaller çalıştıktan sonra). Görünüşe göre, yaptığınız şey, istediğiniz kadar yarı saydamlığı ortadan kaldırarak, birbirinin üzerine birçok dikdörtgen çiziyor. Yani, sadece yolu sadece arsa için global data.frame atamazsanız ... ...

ggplot() + 
    geom_density(data=mtcars, aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) + 
    geom_rect(aes(xmin=100, xmax=200, ymin=0,ymax=Inf), alpha=0.2, fill="red") 

bu dikdörtgen ayrı df koordinatları sabit koduna vardır aşılması veya etmek. Bunun yerine, yalnızca istediğiniz katmanda (bu örnekte, geom_density) kullanın ve diğer katmanları df-free bırakın! Eğer gerekmez böylece

ggplot(mtcars) + 
    geom_density(aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) + 
    annotate("rect", xmin=100, xmax=200, ymin=0, ymax=Inf, alpha=0.2, fill="red") 

Sonraki yöntem tamamını arsa için tek data.frame kullanabilirsiniz: Ya, hatta daha iyisi, varsayılan df altından Hikayenizin dışarı değiştirmek için annotate kullanın Her katman için aynı df'yi belirtin.

enter image description here

+2

Sadece buna bir ekleme. Bunu scale_y_continuous ile birlikte kullanıyorsanız (limit = c (0.005,0.015) deyin), tam olarak kırılma noktalarını belirtin, sahip olamazsınız (ymin = 0, ymax = Inf), min/max değerleriniz düşmelidir – nzcoops

+0

+1 Bu, ggplot ile yaptığım tüm alfa belirtme problemlerini açıklıyor! – geotheory

+1

Bu harika! Ama neden hala anlamıyorum geom_rect (..., alpha = .1) ' Çalışmıyor ama '(' rect ',' alfatate ', ... alpha = .1) 's. – Stuart

1
ggplot(df, aes(xmin = x, xmax = x + 1, ymin = y, ymax = y + 2)) + 
    geom_rect(alpha=.2) + 
    geom_rect(data=data.frame(xmin=3, xmax=6, ymin=3, ymax=5), 
      aes(xmin=xmin,xmax=xmax,ymin=ymin,ymax=ymax), 
      fill="green", alpha=.2) 
+0

sayesinde

Her iki yöntem de eşit araziler geri @ user2559998. Onunla oyuncak yaptım. Yine de, değerleri kodlamak için ne kadar farklı olduğunu göremiyorum:/ – nzcoops

7

başka çözüm çekilir verileri yalnızca bir dikdörtgen sağlamak için nesne tek bir satır geom_rect vermektir:

ggplot(mtcars) + 
    geom_density(aes(x=disp, group=cyl, fill=cyl), alpha=0.6, adjust=0.75) + 
    geom_rect(data=mtcars[1,], aes(xmin=100, xmax=200, ymin=0,ymax=Inf), fill="red", alpha=0.2) 

enter image description here

+0

Eğer faceting iseniz, aradığınız çözümdür. – Nova