gpt4 book ai didi

r - ggplot2:为Alpha设置(非线性)值

转载 作者:行者123 更新时间:2023-12-04 11:02:03 24 4
gpt4 key购买 nike

我想绘制一个镜像的95%密度曲线,并将alpha映射到密度:

foo <- function(mw, sd, lower, upper) {
x <- seq(lower, upper, length=500)
dens <- dnorm(x, mean=mw, sd=sd, log=TRUE)
dens0 <- dens -min(dens)
return(data.frame(dens0, x))
}

df.rain <- foo(0,1,-1,1)

library(ggplot2)


drf <- ggplot(df.rain, aes(x=x, y=dens0))+
geom_line(aes(alpha=..y..))+
geom_line(aes(x=x, y=-dens0, alpha=-..y..))+
stat_identity(geom="segment", aes(xend=x, yend=0, alpha=..y..))+
stat_identity(geom="segment", aes(x=x, y=-dens0, xend=x, yend=0, alpha=-..y..))
drf

这可以很好地工作,但是我想使边缘和中间的对比度更加突出,即,我希望边缘几乎是白色的,而中间部分则是黑色的。我一直在篡改 scale_alpha(),但是没有运气。有任何想法吗?

编辑:最终,我想绘制几个雨滴,即单个雨滴很小,但阴影仍应清晰可见。

最佳答案

我没有将dens0映射到alpha,而是将其映射到color:

drf <- ggplot(df.rain, aes(x=x, y=dens0))+
geom_line(aes(color=..y..))+
geom_line(aes(x=x, y=-dens0, color=-..y..))+
stat_identity(geom="segment", aes(xend=x, yend=0, color=..y..))+
stat_identity(geom="segment", aes(x=x, y=-dens0, xend=x, yend=0, color=-..y..))

现在我们仍然有对比色,主要存在于尾部中。使用两种颜色会有所帮助(请注意,颜色切换为0.25):
drf + scale_color_gradient2(midpoint = 0.25)

最后,为了包括 dens0值的分布,我将色标的中点基于数据中的中值:
drf + scale_color_gradient2(midpoint = median(df.rain$dens0))

注意! :但是,不管您如何调整数据,数据中的最大对比都在于数据集中的更极端的值。试图通过弄乱非线性标度或像我一样调整色标来掩盖这一点,可能会显示真实数据的虚假图片。

关于r - ggplot2:为Alpha设置(非线性)值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11738145/

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