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

如何在ggplot中基于深度条件(>5m)设置不同绘图颜色?

解决方案

首先需要注意,原代码中用cbind()创建的是矩阵而非数据框,建议先转换为数据框类型,方便ggplot处理:

depth1 <- c(1, 3, 6, 8, 10, 14, 16, 19, 20, 22)
depth2 <- c(2, 3, 5, 7, 9, 10, 14, 15, 16, 25)

var1 <- c(2, 4, 6, 8, 10, 12, 17, 18, 20, 22) 
var2 <- c(3, 4, 6, 7, 9, 10, 13, 15, 19, 22) 

var3 <- c(1, 3, 5, 7, 9, 10, 11, 13, 15, 17)
var4 <- c(1, 3, 4, 6, 7, 8, 9, 10, 14, 15)

# 转换为数据框
df1 <- data.frame(depth1, var1, var3)
df2 <- data.frame(depth2, var2, var4)

方式一:带图例的条件着色

如果需要保留深度分组的图例,可以在aes()中用ifelse()生成分组变量,再手动指定颜色:

library(ggplot2)

plot <- ggplot() +
  # df1的点:深度≥6m和<6m分色
  geom_point(data = df1, 
             aes(x = var1, y = var3, 
                 colour = ifelse(depth1 >= 6, "df1-深度≥6m", "df1-深度<6m"))) +
  # df2的点:深度>5m和≤5m分色
  geom_point(data = df2, 
             aes(x = var2, y = var4, 
                 colour = ifelse(depth2 > 5, "df2-深度>5m", "df2-深度≤5m"))) +
  # 自定义颜色映射
  scale_colour_manual(values = c(
    "df1-深度≥6m" = "blue", 
    "df1-深度<6m" = "black",
    "df2-深度>5m" = "red", 
    "df2-深度≤5m" = "gray"
  )) +
  labs(colour = "深度分组")

print(plot)

方式二:无图例的直接条件着色

如果不需要图例,可直接在colour参数中写入条件判断,无需映射到aes():

library(ggplot2)

plot <- ggplot() +
  # df1:深度≥6m显示蓝色,否则黑色
  geom_point(data = df1, aes(x = var1, y = var3),
             colour = ifelse(df1$depth1 >= 6, "blue", "black")) +
  # df2:深度>5m显示红色,否则灰色
  geom_point(data = df2, aes(x = var2, y = var4),
             colour = ifelse(df2$depth2 > 5, "red", "gray"))

print(plot)

两种方式都无需在ggplot外部提前划分数据子集,直接在图层内部通过条件判断实现颜色区分,适配大数据量场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 06:27:12