You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中使用ggplot2和tidyverse为满足2个及以上条件的散点着色

使用ggplot2和tidyverse实现条件着色的散点图

问题描述

现有如下结构的DataFrame:

value1value2condition1condition2condition3
2.30.1FALSEFALSETRUE
3.52.6FALSEFALSETRUE
3.12.5TRUETRUETRUE
3.22.3FALSETRUETRUE
2.41.1TRUETRUEFALSE
2.72.2FALSETRUEFALSE
2.53TRUEFALSETRUE
2.92TRUETRUETRUE
4.21FALSEFALSETRUE
2.21.5FALSETRUETRUE

需要绘制value1与value2的散点图,并为满足2个及以上TRUE条件的点着色。

解决方案

不需要用group_by,核心是先计算每行满足TRUE的条件数量,再据此设置颜色分组:

  • 加载所需包:
library(tidyverse)
  • 处理数据,生成条件判断列:
    用rowwise()结合sum()计算每行的TRUE数量,再用mutate()生成一个布尔列,标记是否满足2个及以上TRUE:
df_processed <- df %>%
  rowwise() %>%
  mutate(
    true_count = sum(c(condition1, condition2, condition3)),
    meets_threshold = true_count >= 2
  ) %>%
  ungroup()
  • rowwise()确保逐行计算

  • sum(c(...))把三个条件列转为向量后求和(TRUE会被当作1,FALSE当作0)

  • meets_threshold最终用来区分需要着色的点

  • 绘制散点图:
    用ggplot(),将color参数绑定到meets_threshold,即可实现条件着色:

ggplot(df_processed, aes(x = value1, y = value2, color = meets_threshold)) +
  geom_point(size = 3) +
  labs(
    x = "Value 1",
    y = "Value 2",
    color = "满足2个及以上条件"
  ) +
  theme_minimal()
  • 如果想自定义颜色,可以用scale_color_manual(),比如:
ggplot(df_processed, aes(x = value1, y = value2, color = meets_threshold)) +
  geom_point(size = 3) +
  scale_color_manual(values = c("FALSE" = "gray", "TRUE" = "darkorange")) +
  labs(
    x = "Value 1",
    y = "Value 2",
    color = "满足2个及以上条件"
  ) +
  theme_minimal()

完整代码示例

# 加载包
library(tidyverse)

# 构造示例数据框
df <- tibble(
  value1 = c(2.3, 3.5, 3.1, 3.2, 2.4, 2.7, 2.5, 2.9, 4.2, 2.2),
  value2 = c(0.1, 2.6, 2.5, 2.3, 1.1, 2.2, 3, 2, 1, 1.5),
  condition1 = c(FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE, FALSE, FALSE),
  condition2 = c(FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE),
  condition3 = c(TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE)
)

# 数据处理
df_processed <- df %>%
  rowwise() %>%
  mutate(
    true_count = sum(c(condition1, condition2, condition3)),
    meets_threshold = true_count >= 2
  ) %>%
  ungroup()

# 绘制散点图
ggplot(df_processed, aes(x = value1, y = value2, color = meets_threshold)) +
  geom_point(size = 3) +
  scale_color_manual(values = c("FALSE" = "gray", "TRUE" = "darkorange")) +
  labs(
    x = "Value 1",
    y = "Value 2",
    color = "满足2个及以上条件"
  ) +
  theme_minimal()

内容的提问来源于stack exchange,提问作者Josh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 03:45:41