如何在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
相关产品推荐
相关产品推荐

