ggplot的`stat_function`不适用于带向量乘法的函数

时间:2018-03-25 11:49:32

标签: r windows ggplot2 anonymous-function matrix-multiplication

Environtment

  • Windows 8.1 64位
  • R 3.4.3

问题

我试图让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)

但我仍然不知道错误的根源是什么。这是一个已知的错误?或者我在某处出错了?有办法解决这个问题吗?

编辑2018-3-25 12:09 GMT

起初我说“矩阵乘法”,但这是一个错误。应该是“矢量乘法”。对不起,感到困惑。

0 个答案:

没有答案