我正在尝试使用1000之间的一组随机数在R中创建密度曲线,并将小于或等于某个值的部分着色.有很多解决方案涉及geom_area或geom_ribbon,但它们都需要一个yval,我没有(它只是1000个数字的向量).有关如何做到这一点的任何想法?
另外两个相关问题:
stat_ecdf它生成一个)做同样的事情,或者根本不用它?geom_vline所以它只会达到密度曲线的高度,而不是整个y轴?代码:( geom_area尝试编辑我发现的一些代码是失败的.如果我ymax手动设置,我只需要一个列占据整个图,而不仅仅是曲线下面的区域)
set.seed(100)
amount_spent <- rnorm(1000,500,150)
amount_spent1<- data.frame(amount_spent)
rand1 <- runif(1,0,1000)
amount_spent1$pdf <- dnorm(amount_spent1$amount_spent)
mean1 <- mean(amount_spent1$amount_spent)
#density/bell curve
ggplot(amount_spent1,aes(amount_spent)) +
geom_density( size=1.05, color="gray64", alpha=.5, fill="gray77") +
geom_vline(xintercept=mean1, alpha=.7, linetype="dashed", size=1.1, color="cadetblue4")+
geom_vline(xintercept=rand1, alpha=.7, linetype="dashed",size=1.1, color="red3")+
geom_area(mapping=aes(ifelse(amount_spent1$amount_spent > rand1,amount_spent1$amount_spent,0)), ymin=0, ymax=.03,fill="red",alpha=.3)+
ylab("")+
xlab("Amount spent on lobbying (in Millions USD)")+
scale_x_continuous(breaks=seq(0,1000,100))
Run Code Online (Sandbox Code Playgroud) 是否可以使用 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) 给定来自rnorm, 和截止值的绘制c,我希望我的绘图使用以下颜色:
-c-c蓝色表示和之间的部分cc例如,如果我的数据是:
set.seed(9782)
mydata <- rnorm(1000, 0, 2)
c <- 1
Run Code Online (Sandbox Code Playgroud)
我想绘制这样的东西:
但如果我的数据全部位于右侧,则c整个图应该是绿色的。同样,如果全部位于-c和 之间c或左侧,则-c绘图应全部为红色或蓝色。
这是我写的代码:
MinD <- min(mydata)
MaxD <- max(mydata)
df.plot <- data.frame(density = mydata)
if(c==0){
case <- dplyr::case_when((MinD < 0 & MaxD >0) ~ "L_and_R",
(MinD > 0) ~ "R",
(MaxD < 0) ~ "L")
}else{
case <- dplyr::case_when((MinD < -c & MaxD >c) ~ "ALL",
(MinD > …Run Code Online (Sandbox Code Playgroud)