gpt4 book ai didi

r - 如何在 ggplot 中对密度曲线的一部分进行着色(没有 y 轴数据)

转载 作者:行者123 更新时间:2023-12-04 00:54:14 24 4
gpt4 key购买 nike

我正在尝试使用一组 1000 之间的随机数在 R 中创建密度曲线,并对小于或等于某个值的部分进行着色。有很多解决方案涉及 geom_areageom_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))

    最佳答案

    有几个问题表明了这一点... herehere ,但他们在绘图之前计算密度。

    这是另一种方式,比我确定的要求更复杂,允许 ggplot为你做一些计算。

    # Your data
    set.seed(100)
    amount_spent1 <- data.frame(amount_spent=rnorm(1000, 500, 150))

    mean1 <- mean(amount_spent1$amount_spent)
    rand1 <- runif(1,0,1000)

    基本密度图
    p <- ggplot(amount_spent1, aes(amount_spent)) +
    geom_density(fill="grey") +
    geom_vline(xintercept=mean1)

    您可以提取 xy使用 ggplot_build 从绘图对象阴影区域的位置.线性插值用于获得 y值在 x=rand1
    # subset region and plot
    d <- ggplot_build(p)$data[[1]]

    p <- p + geom_area(data = subset(d, x > rand1), aes(x=x, y=y), fill="red") +
    geom_segment(x=rand1, xend=rand1,
    y=0, yend=approx(x = d$x, y = d$y, xout = rand1)$y,
    colour="blue", size=3)

    enter image description here

    关于r - 如何在 ggplot 中对密度曲线的一部分进行着色(没有 y 轴数据),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31215748/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com