首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何给散射点对角线的选定部分着色?

如何给散射点对角线的选定部分着色?
EN

Stack Overflow用户
提问于 2021-07-12 19:00:34
回答 1查看 131关注 0票数 0

我试图选择对角线内的点,但如果你看图,它也选择在对角线以下的点。

代码语言:javascript
运行
复制
IBD$COLOR <- ifelse((IBD$Z0 < 0.5 &
                       IBD$Z0 > 0.10 &
                       IBD$Z1 < 0.9 &
                       IBD$Z1 > 0.5), "OK", "BAD")

我想用蓝色绘制点,而不选择对角线下面的点。在这里选择IBD$COLOR的正确方法是什么?

代码语言:javascript
运行
复制
ggplot(IBD, aes(x=Z0, y=Z1))+ geom_point(aes(color=COLOR)) + ggtitle("Replication dataset - 2441") 

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-12 19:14:41

我相信你是在建议有三种颜色:蓝色/红色表示确定/坏,也许灰色的点不在对角线上或附近。为此,我建议您的ifelse应该更复杂一点,包括从对角线的“距离”,以及。

下面是一些模拟你的情节的假数据:

代码语言:javascript
运行
复制
## 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

代码语言:javascript
运行
复制
dat$COLOR <- factor(dat$COLOR, levels = c("OK", "Bad", "Boring"))

在密谋之前。

如果您使用的是dplyr,那么使用case_when来管理处理(和分解)可能会更简单,可能如下:

代码语言:javascript
运行
复制
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等。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68352668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档