我想按组绘制密度图,这样当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创建

推荐答案

您还不能在原生gggraph中使用渐变填充(这包括Alpha通道上的渐变).您可以使用垂直线段给出渐变填充的外观,这些垂直线段的各个Alpha值沿x轴变化.

请注意,您的Alpha计算在这里不太正确.myalpha2在0点上的最小值为0.5,因为您可以很容易地与min(df$myalpha2)核对.

要解决此问题并实现垂直线段破解,您可以执行以下操作:

df %>% 
  mutate(myalpha2 = 2 * (as.vector(myalpha2) - 0.5)) %>%
  ggplot(aes(x = xval, y = yval))+
  geom_line()+
  geom_vline(xintercept = 0)+
  geom_segment(aes(alpha = myalpha2, xend = xval, yend = 0, color = model), 
               size = 1) +
  scale_color_manual(values = c("red", "pink", "orange"))+
  scale_alpha_identity()

enter image description here

R相关问答推荐

有没有方法将琴弦完全捕捉到R中的多边形?

根据shiny 应用程序中的数字输入更改图标 colored颜色

使用ggplot 2根据R中的类别排列Likert比例gplot

如何使用R中的dhrr函数将李克特量表的因子列从长转换为宽?

如何使用按钮切换轨迹?

在GGPLATE中将突出的点放在前面

使用sf或terra的LINESTRAING的累积长度

Select 季度月值

更改STAT_VALLES/STAT_PEAKS中的箭头线宽/大小

如何在R中平滑地绘制线图(不拟合)?

如何移除GGPlot中超出与面相交的任何格网像元

如何将一个方阵分解成没有循环的立方体

如何对r中包含特定(未知)文本的行求和?

为什么这个表格格罗布不打印?

防止正则表达式覆盖以前的语句

整理ggmosaic图的标签

如何使用ggplot2根据绘图中生成的斜率对小平面进行排序?

将数据从一列转换为按组累计计数的单个虚拟变量

如何修改GT表中组名行的 colored颜色 ?

使用dqur在不同变量上创建具有多个条件的变量