使用ggplot2复现R基础绘图函数曲线的问题求助
解决ggplot2复现基础绘图曲线异常及调整线宽问题
1. 基础绘图(Base Graphics)的正确实现
使用R基础绘图成功生成4条函数曲线,代码及效果如下:
I0 <- log(1) I1 <- log(1/2) b <- .1 d <- .01 d1 <- .014 curve(exp(I0 - b * x), 0, 50, col = "blue", lwd = 2) curve(exp(d * x) - 1, 0, 50, add = TRUE, col = "orange", lwd = 2) curve(exp(I1 - b * x), 0, 50, add = TRUE, lty = 2, col = "green", lwd = 2) curve(exp(d1 * x) - 1, 0, 50, add = TRUE, lty = 2, col = "red", lwd = 2)

2. ggplot2复现的异常原因
尝试用ggplot2复现时得到异常结果,核心问题是代码中两个函数遗漏了-1的运算:基础绘图里橙色、红色曲线对应的函数是exp(d * x) - 1和exp(d1 * x) - 1,但ggplot2代码里只写了exp(d * x)和exp(d1 * x),导致数值范围差异极大,出现异常图形。
原异常代码及效果:
library(ggplot2) I0 <- log(1) I1 <- log(1/2) b <- .1 d <- .01 d1 <- .014 base <- ggplot() + xlim(0, 50) + geom_function(fun = function(x) exp(I0 - b * x), colour = "blue") + geom_function(fun = function(x) exp(d * x), colour = "orange") + geom_function(fun = function(x) exp(I1 - b * x), color = "green") + geom_function(fun = function(x) exp(d1 * x), color = "red") plot(base)

3. 修正后的ggplot2代码
补上遗漏的-1,同时添加线型、线宽参数,完全复现基础绘图的样式:
library(ggplot2) I0 <- log(1) I1 <- log(1/2) b <- .1 d <- .01 d1 <- .014 base <- ggplot() + xlim(0, 50) + geom_function(fun = function(x) exp(I0 - b * x), colour = "blue", size = 2) + geom_function(fun = function(x) exp(d * x) - 1, colour = "orange", size = 2) + geom_function(fun = function(x) exp(I1 - b * x), color = "green", linetype = 2, size = 2) + geom_function(fun = function(x) exp(d1 * x) - 1, color = "red", linetype = 2, size = 2) plot(base)
4. ggplot2中调整线宽的方法
在ggplot2里,调整线宽使用size参数(区别于基础绘图的lwd),有两种常用方式:
- 单条曲线调整:在对应的
geom_function(或其他线类geom,如geom_line)中直接添加size=数值,比如size=2对应基础绘图的lwd=2。 - 全局线宽调整:使用
theme(panel.grid.major = element_line(size=1), panel.grid.minor = element_line(size=0.5))等,统一设置主题内的线宽。
内容的提问来源于stack exchange,提问作者maurobio
相关产品推荐
相关产品推荐

