我试图绘制一个图,并在p> 0.5时显示不同的颜色,但是当我使用颜色aes时,线条似乎断开了。
library(tidyverse)
data <- tibble(n = 1:365)
prob <- function (x) {
pr <- 1
for (t in 2:x) {
pr <- pr * ((365 - t + 1) / 365)
}
return(1 - pr)
}
data %>%
mutate(prob = map_dbl(n, prob)) %>%
filter(n < 100) %>%
ggplot(aes(x = n, y = prob, color = prob > 0.5)) + geom_line() +
scale_x_continuous(breaks = seq(0,100,10))
有人知道为什么吗?删除颜色aes()
会提供唯一的一行。
答案 0 :(得分:2)
这是因为prob
是一个离散变量,而条件prob > 0.5
会将您的数据分为两部分,两者之间有空隙:上半部分的max(prob)
= .476,第二部分一半的min(prob)
= .507。因此,折线图上的(垂直)间隙就是这些数字之间的间隙。
如果您过滤修改后的 data 值接近.5的内容,则可以看到它:
data %>%
mutate(prob = map_dbl(n, prob)) %>%
filter(n < 100) %>%
filter(between(prob, .4, .6))
如果我们修改您的示例:
data2 <- data %>%
mutate(prob = map_dbl(n, prob)) %>%
filter(n < 100)
#bringing extremes closer together
data2$prob[22] <- .49999999999999
data2$prob[23] <- .50000000000001
data2 %>%
ggplot(aes(x = n, y = prob, color = prob >= 0.5)) + geom_line() +
scale_x_continuous(breaks = seq(0,100,10))
差距大大缩小:
但是,它仍然存在(主要在水平位置)-因为x变量也是离散的
解决此问题的一种简单方法是在group = 1
内添加虚拟美学aes()
,它会覆盖x
变量的默认分组。
data %>%
mutate(prob = map_dbl(n, prob)) %>%
filter(n < 100) %>%
#add 'group = 1' below
ggplot(aes(x = n, y = prob, color = prob >= 0.5, group = 1)) + geom_line() +
scale_x_continuous(breaks = seq(0,100,10))