我想按组绘制密度图,这样当x轴值更接近0时,Alpha值就会减少(更透明).
基于data
数据集,我通过将x轴值重新调整为0来生成Alpha列.
我以为把alpha
加到aes()
里面会行得通,但这是错误的.
library(tidyverse)
library(purrr)
library(scales)
set.seed(123)
data <- tibble(A = rnorm(100),
B = rnorm(100, mean = -0.7),
C = rnorm(100, mean = 1)) %>%
pivot_longer(cols = everything(),
names_to = "model") %>%
group_by(model) %>%
summarise(value = list(value)) %>%
mutate( xval = map(value, ~density(.x)$x),
yval = map(value, ~density(.x)$y)) %>%
select(-value) %>%
unnest(ends_with("val"))
#create alpha column
df <- data %>%
group_by(model) %>%
mutate(myalpha = abs(scale(xval, center = 0)), #scale to center around 0
myalpha2 = scales::rescale_mid(myalpha, mid = 0) #rescale 0-1, 0 for values around 0
) %>%
as_tibble()
df %>%
ggplot(aes(x = xval, y = yval,
fill = model, col = model))+
geom_line()+
geom_vline(xintercept = 0)+
geom_density(aes(alpha = myalpha2), #alpha white around 0
stat = "identity")+
scale_fill_manual(values = c("red", "pink", "orange"))+
scale_alpha_identity()
#> Error in `f()`:
#> ! Aesthetics can not vary with a ribbon
由reprex package(v2.0.1)于2022-09-11创建