2013-11-25 6 views
5

Ich möchte Hintergrundfarben in meinem ggplot festlegen, um Datenbereiche hervorzuheben. Insbesondere möchte ich [-0.1,0.1] mit, sagen wir, grün, [-0.25,-0.1) und (0.1,0.25] mit Orange hervorheben. Mit anderen Worten, was ich brauche, sind Balken mit einer Alpha-Transparenz, deren y-Grenzen der y-Bereich des Diagramms sind, und x-Grenzen werden von mir gesetzt.Hintergrund anpassen, um Datenbereiche in ggplot hervorzuheben

Idealerweise würde ich etwas wollen, das nicht auf empfindlich wäre (wie Einstellung vline(...,size = X) würde). Darüber hinaus wäre es nett, etwas unabhängig von irgendwelchen Daten zu haben und nur auf Plot-Koordinaten zu basieren. Ich habe versucht, geom_segment, aber ich konnte es nicht unser, wie man eine Breite einstellen, die funktionieren würde.

library(ggplot2) 
x <- c(seq(-1, 1, by = .001)) 
y <- rnorm(length(x)) 
df <- as.data.frame(x=x,y=y) 

ggplot(df,aes(x,y)) + 
    geom_point(aes(y*abs(x)),alpha=.2,size=5) + 
    theme_bw() + 
    coord_cartesian(xlim = c(-.5,.5),ylim=c(-1,1)) 

example

+0

Verwenden 'geom_rect'. – Roland

Antwort

9

Sie können die "Bars" mit geom_rect() hinzufügen und ymin und ymax Werte -Inf und Inf Einstellung. Aber nach @sc_evens antwort auf this question müssen Sie data und aes() zu geom_point() verschieben und ggplot() leer lassen, um sicherzustellen, dass alpha= von geom_rect() funktioniert wie erwartet.

ggplot()+ 
    geom_point(data=df,aes(x=y*abs(x),y=y),alpha=.2,size=5) + 
    geom_rect(aes(xmin=-0.1,xmax=0.1,ymin=-Inf,ymax=Inf),alpha=0.1,fill="green")+ 
    geom_rect(aes(xmin=-0.25,xmax=-0.1,ymin=-Inf,ymax=Inf),alpha=0.1,fill="orange")+ 
    geom_rect(aes(xmin=0.1,xmax=0.25,ymin=-Inf,ymax=Inf),alpha=0.2,fill="orange")+ 
    theme_bw() + 
    coord_cartesian(xlim = c(-.5,.5),ylim=c(-1,1)) 

enter image description here

+1

Ich möchte nur mit Ihnen überprüfen: wenn Sie eine der "orange" Alpha auf z. 0,1, und die andere auf 0,9, ändert es das Aussehen der Rechtecke? I.e. Funktioniert 'alpha' zumindest so, wie ich es bei' geom_rect' erwartet habe? Sorry im Voraus, wenn ich hier etwas falsch mache. – Henrik

+0

@Henrik Vielen Dank, dass Sie auf das Problem mit Alpha hingewiesen haben - meine Antwort wurde aktualisiert. –

+0

Ich hatte ein vages Gefühl, dass ich vorher mit 'geom_rect' und' alpha' gekämpft hatte. Kurz bevor ich verrückt geworden bin, habe ich aufgegeben und stattdessen "annotieren". Vielen Dank @Didzis Elferts für die Klärung dieses "Problems"! – Henrik

8

Sie annotate versuchen können, die Vektoren von xmin und xmax Werte annimmt.

ggplot(df,aes(x,y)) + 
    geom_point(aes(y*abs(x)), alpha =.2, size = 5) + 
    annotate("rect", xmin = c(-0.1, -0.25, 0.1), xmax = c(0.1, -0.1, 0.25), 
      ymin = -1, ymax = 1, 
      alpha = 0.2, fill = c("green", "orange", "orange")) + 
    theme_bw() + 
    coord_cartesian(xlim = c(-.5,.5),ylim=c(-1,1)) 

enter image description here

Verwandte Themen