相关疑难解决方法(0)

如何在ggplot中遮蔽部分密度曲线(没有y轴数据)

我正在尝试使用1000之间的一组随机数在R中创建密度曲线,并将小于或等于某个值的部分着色.有很多解决方案涉及geom_areageom_ribbon,但它们都需要一个yval,我没有(它只是1000个数字的向量).有关如何做到这一点的任何想法?

另外两个相关问题:

  1. 是否有可能对累积密度函数(我目前正在使用stat_ecdf它生成一个)做同样的事情,或者根本不用它?
  2. 有没有办法编辑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)

r ggplot2 density-plot

12
推荐指数
1
解决办法
4460
查看次数

vline左侧的阴影密度图?

是否可以使用 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)

r ggplot2

5
推荐指数
1
解决办法
490
查看次数

使用 ggplot 固定填充密度图的不同部分

给定来自rnorm, 和截止值的绘制c,我希望我的绘图使用以下颜色:

  1. 红色表示左侧的部分-c
  2. -c蓝色表示和之间的部分c
  3. 绿色代表右侧的部分c

例如,如果我的数据是:

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)

r ggplot2

3
推荐指数
1
解决办法
1560
查看次数

标签 统计

ggplot2 ×3

r ×3

density-plot ×1