我试图通过调整alpha值来复制一些纵向数据的轨迹图,突出显示随机对象轨迹。我有95%的路在那里除了当alpha = 0(它仍然显示为灰色)时,我似乎无法获得线图的完全透明度。有任何想法吗? - 数据在这里:
谢谢。
# 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)
答案 0 :(得分:2)
如果您尝试重现第一个图表,则x轴应为时间,y轴为拟合的残差。因此,您需要将包含macs
的原始数据time
与fit
中的残差相结合。我会使用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()
答案 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)
拥有geom_line
的干净,完全透明的color=NA
。仅用于比较,如果您从color=NA
移除geom_line
参数,即使使用alpha=0
,您也会获得有效的&#34;默认颜色&#34;的行:
答案 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()