是否可以使用 vline 作为截止点对密度图进行着色?例如:
df.plot <- data.frame(density=rnorm(100))
library(ggplot2)
ggplot(df.plot, aes(density)) + geom_density() +
geom_vline(xintercept = -0.25)
Run Code Online (Sandbox Code Playgroud)
我尝试创建一个新变量,但它没有按我预期的那样工作
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)
Run Code Online (Sandbox Code Playgroud)
我不知道有什么方法可以直接使用ggplot. 但是您可以在所需范围内计算 ggplot 之外的密度:
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)
Run Code Online (Sandbox Code Playgroud)
density()估计其第一个参数中给出的点的密度。结果将包含x和y值。你可以指定x你有兴趣与-rangefrom和to。为了使密度与由 绘制的密度一致ggplot(),请将范围设置为 中的最小值和最大值df.plot$density。此处,to设置为-0.25,因为您只需要 vline 左侧的密度曲线部分。然后,您可以使用and提取xandy值。ds$xds$y
然后使用与您相同的代码创建绘图,但添加了geom_area()上面计算的密度数据的附加代码:
library(ggplot2)
ggplot(df.plot, aes(density)) + geom_density() +
geom_vline(xintercept = -0.25) +
geom_area(data = ds_data, aes(x = x, y = y))
Run Code Online (Sandbox Code Playgroud)