ggplot alpha = 0无效

时间:2018-03-13 02:33:15

标签: r ggplot2

我试图通过调整alpha值来复制一些纵向数据的轨迹图,突出显示随机对象轨迹。我有95%的路在那里除了当alpha = 0(它仍然显示为灰色)时,我似乎无法获得线图的完全透明度。有任何想法吗? - 数据在这里:

https://d.pr/f/iIoE8q+

谢谢。

# Assign random alpha (0 [90%] or 1 [10%]) values
macs <-  ddply(macs, .(id), function(x){
  x$alpha = ifelse(runif(n = 1) > 0.9, 1, 0)
  x
})

# Loess fit
fit <- loess(CD4 ~ time, data=macs, span = 0.5)

# Plot
ggplot(data = macs, aes(x = fitted(fit), y = resid(fit))) +
  geom_point(aes(alpha=1), size = 0.5) +  
  geom_line(aes(alpha=alpha, group=id)) + 
  guides(alpha=FALSE)

plot to replicate

my attempt

3 个答案:

答案 0 :(得分:2)

如果您尝试重现第一个图表,则x轴应为时间,y轴为拟合的残差。因此,您需要将包含macs的原始数据timefit中的残差相结合。我会使用broom::augment

对于alpha问题,您需要将值转换为因子,然后使用scale_alpha_discrete

library(tidyverse)
library(broom)

fit %>% 
  augment() %>% 
  bind_cols(macs) %>% 
  mutate(alpha = factor(alpha)) %>%
  ggplot(aes(time, .resid)) + 
    geom_line(aes(group = id, alpha = alpha)) + 
    scale_alpha_discrete(range = c(0, 1)) + 
    geom_point(size = 0.5) + 
    guides(alpha = FALSE) + 
    theme_bw()

enter image description here

答案 1 :(得分:1)

问题与color中的ggplot行为有关。一个简单的解决方法是在相应的NA为0时明确指定其颜色为alpha。这是我在ggplot调用之前添加的代码:

color_rule <- ifelse(macs$alpha == 0, NA, "black")

ggplot的轻微修改:

ggplot(data = macs, aes(x = fitted(fit), y = resid(fit))) +
  geom_point(aes(alpha=1), size = 0.5) +  
  geom_line(aes(alpha=alpha, group=id), color=color_rule) + 
  guides(alpha=FALSE)

这会得到以下情节: enter image description here

拥有geom_line的干净,完全透明的color=NA。仅用于比较,如果您从color=NA移除geom_line参数,即使使用alpha=0,您也会获得有效的&#34;默认颜色&#34;的行: enter image description here

答案 2 :(得分:1)

只需添加 scale_alpha(range = c(0, 1)) 即可,因为 alpha 的默认范围是 c(0.1, 1)

iris$alpha = rep(c(0, 0.5, 1), length = 150)
ggplot(iris,
       aes(Sepal.Length, Sepal.Width, alpha = alpha, color = Species)) +
  geom_point() +
  scale_alpha(range = c(0, 1)) +
  theme_bw()