如何在ggplot2中利用两个变量实现条件性颜色填充?
解决方法
首先,你需要调整fill的映射逻辑,同时修正原代码里的小语法问题,具体操作如下:
- 核心映射调整:在
aes()里用条件判断,让三角洲(deltaic=1)的点填充值设为NA,这样ggplot会自动跳过这些点的填充;非三角洲的点则用Acceleration变量控制填充色。 - 简化语法:ggplot的
aes()里直接用列名即可,不用加figuredata$前缀,代码更简洁且不易出错。 - 修复语法错误:原代码里
scale_shape_manual语句末尾少了个+号,这会导致代码运行报错,必须补上。
修改后的完整代码
figuredata <- SitesDataCompiled[order(SitesDataCompiled$SelectedSite),] ggplot(data = figuredata, aes(x = Acceleration, y = ElChange, fill = ifelse(deltaic != 1, Acceleration, NA), shape = as.factor(SelectedSite), size = 3)) + geom_point(color = "black", shape = 21, stroke = 1) + scale_shape_manual(values = c("0" = 21, "1" = 24)) + scale_x_continuous(breaks = c(-3,-2,-1,0,1,2,3), limits = c(-3,3)) + scale_y_continuous(breaks = c(-25,0,25,50,75), limits = c(-25,75)) + scale_fill_gradientn(colors = rainbow(5), na.value = NA) + # 明确NA值不填充 guides(size = "none", shape = "none")
关键说明
fill = ifelse(deltaic != 1, Acceleration, NA):这是实现需求的核心,判断每个点是否为三角洲位点,非三角洲的点用Acceleration值作为填充依据,三角洲位点设为NA。scale_fill_gradientn里的na.value = NA:确保填充值为NA的点(即三角洲位点)完全没有填充色,只保留黑色边框。- 去掉
figuredata$前缀:ggplot会自动从你指定的data参数中读取列,加前缀反而容易引发不必要的问题。
内容的提问来源于stack exchange,提问作者EmyNemi
相关产品推荐
相关产品推荐

