我试图选择对角线内的点,但如果你看图,它也选择在对角线以下的点。
IBD$COLOR <- ifelse((IBD$Z0 < 0.5 &
IBD$Z0 > 0.10 &
IBD$Z1 < 0.9 &
IBD$Z1 > 0.5), "OK", "BAD")我想用蓝色绘制点,而不选择对角线下面的点。在这里选择IBD$COLOR的正确方法是什么?
ggplot(IBD, aes(x=Z0, y=Z1))+ geom_point(aes(color=COLOR)) + ggtitle("Replication dataset - 2441")

发布于 2021-07-12 19:14:41
我相信你是在建议有三种颜色:蓝色/红色表示确定/坏,也许灰色的点不在对角线上或附近。为此,我建议您的ifelse应该更复杂一点,包括从对角线的“距离”,以及。
下面是一些模拟你的情节的假数据:
## generate fake data
set.seed(42)
dat <- data.frame(Z0=runif(10000), Z1=runif(10000))
dat <- dat[(dat$Z0 + dat$Z1) < 1,]
## your processing picks up here
dat$COLOR <- with(dat, ifelse((Z1 + Z0) < 0.95, "Boring",
ifelse(0.1 < Z0 & Z0 < 0.5 & 0.5 < Z1 & Z1 < 0.9, "OK", "Bad")))
ggplot(dat, aes(Z0, Z1)) +
geom_point(aes(color = COLOR)) +
scale_color_manual(values = c(Boring="gray", OK="blue", Bad="red"))

如果您想控制COLOR图例的顺序(默认情况下按字母顺序排序),那么您可能需要使用factor的
dat$COLOR <- factor(dat$COLOR, levels = c("OK", "Bad", "Boring"))在密谋之前。
如果您使用的是dplyr,那么使用case_when来管理处理(和分解)可能会更简单,可能如下:
library(dplyr)
dat %>%
mutate(
COLOR = case_when(
(Z1 + Z0) < 0.95 ~ "Boring",
between(Z0, 0.1, 0.5) & between(Z1, 0.5, 0.9) ~ "OK",
TRUE ~ "Bad"),
COLOR = factor(COLOR, levels = c("OK", "Bad", "Boring"))
) %>%
ggplot(aes(Z0, Z1)) +
geom_point(aes(color = COLOR)) +
scale_color_manual(values = c(Boring="gray", OK="blue", Bad="red"))同时结合了between(.)和case_when的易用性。(请注意,between使用封闭端点,因此这实际上等同于0.1 <= Z0 & Z0 <= 0.5等。)
https://stackoverflow.com/questions/68352668
复制相似问题