我试图让ggplot用数据绘制一个函数。
dat <- data.frame(x=1:10, y=(1:10)^3) # sample data
param <- c(0.1, 0.2, 0.3) # sample parameters
ggplot(dat, aes(x,y)) +
geom_point() +
stat_function(fun=function(x) 1/(c(1, log(x), (log(x))^3) %*% param))
但是这给了我以下错误。
警告讯息:
stat_function()
中的计算失败: 不一致的论点
我在网上搜索了“stat_function()
中的计算失败”,但找不到太多信息。
所以我试图找出发生了什么。最后,在我看来,使用向量乘法的函数会导致错误。
原因如下。
它没有向量乘法。
ggplot(dat, aes(x,y)) +
geom_point() +
stat_function(fun=function(x) log(x)*200)
它也适用于矢量乘法而没有x
。
ggplot(dat, aes(x,y)) +
geom_point() +
stat_function(fun=function(x) c(100,200,300) %*% param)
但它并不适用于他们两个。
ggplot(dat, aes(x,y)) +
geom_point() +
stat_function(fun=function(x) c(log(x)*100,200,300) %*% param)
一个明显的解决方法是手动计算x函数的输出,其间隔小到足以使绘图平滑。以下工作。
xfun = seq(1,10,0.1)
yfun = sapply(xfun, function(x) 1/(c(1, log(x), (log(x))^3) %*% param))
datfun = data.frame(x=xfun, y=yfun)
ggplot(dat, aes(x,y)) +
geom_point() +
geom_line(data=datfun)
但我仍然不知道错误的根源是什么。这是一个已知的错误?或者我在某处出错了?有办法解决这个问题吗?
起初我说“矩阵乘法”,但这是一个错误。应该是“矢量乘法”。对不起,感到困惑。