2016-03-25 3 views
3

Kann ein Dichtediagramm mit einem Vline als Grenzwert schattiert werden? Zum Beispiel:Farbdichtediagramm links von vline?

df.plot <- data.frame(density=rnorm(100)) 
library(ggplot2) 
ggplot(df.plot, aes(density)) + geom_density() + 
    geom_vline(xintercept = -0.25) 

Ich habe versucht, eine neue Variable zu schaffen, aber es funktioniert nicht wie ich

erwartet
df.plot <- df.plot %>% mutate(color=ifelse(density<(-0.25),"red","NULL")) 


ggplot(df.plot, aes(density, fill = color, colour = color)) + geom_density() + 
    geom_vline(xintercept = -0.25) 

Antwort

3

Ich weiß nicht, von einer Art und Weise mit ggplot, dass direkt zu tun. Aber man konnte die Dichte außerhalb von ggplot über den gewünschten Bereich berechnen:

set.seed(4132) 
df.plot <- data.frame(density=rnorm(100)) 
ds <- density(df.plot$density, from = min(df.plot$density), to = -0.25) 
ds_data <- data.frame(x = ds$x, y = ds$y) 

density() schätzt die Dichte für die in ihrem ersten Argument Punkte. Das Ergebnis enthält die Werte x und y. Sie können den x-Bereich, an dem Sie interessiert sind, mit from und to angeben. Damit die Dichte mit der von ggplot() aufgetragenen übereinstimmt, stellen Sie die Bereiche auf den minimalen und maximalen Wert in df.plot$density ein. Hier wird to auf -0.25 gesetzt, weil Sie nur den Teil der Dichtekurve links von Ihrer vline möchten. Sie können dann die Werte x und y mit ds$x und ds$y extrahieren.

Das Grundstück wird dann unter Verwendung des gleichen Code erstellt, wie Sie taten, aber das Hinzufügen einer zusätzlichen geom_area() mit der Dichtedaten, die oben berechnet:

library(ggplot2) 
ggplot(df.plot, aes(density)) + geom_density() + 
    geom_vline(xintercept = -0.25) + 
    geom_area(data = ds_data, aes(x = x, y = y)) 

enter image description here