首页 > 解决方案 > r缩放alpha不连续

问题描述

取以下数据

df <- data.frame(ID = c(1, 1, 2, 2, 3, 3),
                 cond = c(2, 2, 2, 2, 1, 1),
                 Time = c(1,2,1,2,1,2),
                 State  = c(0, 0, 0, 1, 1, 0),
                 eyes = c(2, -3, -2, 1, 0, -2),
                 combination = c("1", "1","2", "2", "3", "3"))
df$cond <- factor(df$cond,levels = c("1", "2"))
ggplot(df, aes(x = Time, y = eyes)) +
  ggforce::geom_link2(aes(group=ID, color = cond, alpha = State), size = 5, n = 500, lineend = "round") +
  scale_color_manual(values=c("#CC6666", "#9999CC")) +
  scale_alpha_continuous(range = c(0.01, 0.9)) +
  scale_shape_manual(values=c(13,15)) +
  
    theme(legend.title=element_blank(),
        axis.title.x=element_text(size = 12),
        axis.title.y=element_text(size = 12),
        plot.title = element_text(hjust = 0.5, size = 15),
        axis.text.x= element_text(color = "black"),
        axis.text.y= element_text(color = "black"),
        axis.line = element_line(colour = "black"),
        plot.background = element_rect(fill = "white"),
        panel.background = element_rect(fill = "white"))

这将产生以下图片:在此处输入图像描述

我试图通过 alpha 的连续变化使第 2 行和第 3 行在 x 轴上出现/消失。虽然线条是在两个值 (0, 1) 之间绘制的,但 alpha 似乎并没有在线条上均匀变化(从 0.01 alpha 开始,0.9 alpha 在值 1)。相反,这些线条几乎立即增长到完整的 0.9 alpha - 为什么会这样,我该如何解决?

标签: rscalealpha

解决方案


之所以会出现这种效果,是因为 500 个点通过geom_link2()向绘图添加了额外的 alpha 链接。

为了说明,我们可以只用 20 个点重复该图,然后这些点变得清晰可见:

ggplot(df, aes(x = Time, y = eyes)) +
  ggforce::geom_link2(aes(group = ID, color = cond, alpha = State),
                      size = 5, n = 20, lineend = "round") +
  scale_color_manual(values = c("#CC6666", "#9999CC")) +
  scale_alpha_continuous(range = c(0.01, 0.9)) +
  scale_shape_manual(values = c(13, 15))

输出:

点数较少的梯度

据我所知,这是ggforce::geom_link()函数族的一个限制。但是,您可以对这些点进行插值并尝试计算调整后的 alpha 值(例如 alpha ^ 2),该值看起来适合您的数据。


推荐阅读