R中用ggplot2绘图时如何分别限制自定义函数的定义域
解决方法
核心实现逻辑是在自定义函数中加入区间判断,不在你指定的生效定义域内的输入值直接返回NA,ggplot2绘制路径时会自动跳过NA对应的点位,不会渲染这部分线条,就能避免多余的区间重叠。你最开始尝试的函数参数直接写判断条件的写法不符合R语法规则,需要将判断逻辑写到函数体内部。
修正后完整代码
library(ggplot2) x <- data.frame(x = seq(0, -100, by = -1)) # 自定义函数,可自行调整ifelse中的判断条件为你需要的定义域 # 示例y1仅在x >= -30区间生效,你可以修改为x >= 0.1等任意规则 y1 <- function(x) { ifelse(x >= -30, 0.0323488 - 0.00287746*x - 1.33985e-05*x^2, NA) } # 示例y2仅在-70 <= x < -30区间生效 y2 <- function(x) { ifelse(x >= -70 & x < -30, 0.0144666 - 0.00656506*x - 2.97314e-05*x^2, NA) } # 示例y3仅在x < -70区间生效 y3 <- function(x) { ifelse(x < -70, -0.0584923 - 0.0124322*x, NA) } p4a <- ggplot(x, aes(x = x)) + geom_path(aes(colour = "red"), stat = "function", fun = y1, size = 1) + geom_path(aes(colour = "blue"), stat = "function", fun = y2, size = 1) + geom_path(aes(colour = "black"), stat = "function", fun = y3, size = 1) + xlim(0, -100) + scale_y_continuous(limits = c(0, 0.9)) + theme(axis.title.y = element_blank()) + scale_colour_identity("Function", guide = "legend", labels = c("y1", "y2", "y3"), breaks = c("red", "blue", "black")) p4a
注意事项
你可以根据实际需求自由调整每个函数ifelse中的判断条件,支持单边界限制(如x >= 0.1)、区间限制(如-50 < x <= -10)等任意逻辑。
内容的提问来源于stack exchange,提问作者MacUser
相关产品推荐
相关产品推荐

