【问题标题】:Plotting Log scale in R在 R 中绘制对数刻度
【发布时间】:2012-09-15 06:45:21
【问题描述】:

我正在尝试绘制对数刻度,但我不断收到此错误:

Error in plot.window(...) : invalid "log=1/h" specification. 

我不确定我做错了什么。以下是我的代码:

   #function
function(stepsize, temp_val, counter) {
  while(counter < 0) {
    counter <- counter + stepsize
    px_norm <- dnorm(counter, mean = 0, sd = .04)
    temp_val <- temp_val + px_norm }
  temp_val <- 2*temp_val
  temp_val <- temp_val *(stepsize/2)
  print(temp_val, digits = 12)
}

#Initial step size
h <- .01 
while (h > .00001) {
  x <- calc_error(h, 0, -5) #Gives me a result around .5
  err <- x - (exp(-.02)*0.5)
  plot(1/h, err, log = "1/h")
  h <- h/10 }

基本上,在我试图展示的这个简短函数中,随着步长的增加,真实答案的误差会减少。但是,我在绘制这个时遇到了麻烦。任何帮助将不胜感激。谢谢

【问题讨论】:

  • 这不是一个可重现的例子。 # 用于 R 中的 cmets,而不是 //calc_error 是什么?我们没有那个功能。
  • 该函数运行良好,其结果约为 0.5。我只是在绘图时遇到问题
  • 我们完全不知道那个函数是什么。我们无法读懂你的想法。没有calc_error,我们无法生成数据来绘制任何东西。此外,在循环内绘制每个点是没有意义的。
  • @Josh 该功能可能运行良好,但我们没有calc_error 功能。如果它是由您编写的或可以在其中找到它的包,您将需要提供此函数的代码。否则我们无法重现您的代码。

标签: r graph statistics plot logarithm


【解决方案1】:
plot(1/h, err, log = "1/h")

log 应该是您想要在日志空间中绘制的坐标轴,而不是实际数据。

plot(1/h, err, log = "x")

将在日志空间中绘制您的 x 轴

【讨论】:

  • 嗨,我似乎看不到“对数”图,x 轴上只有一条直线,但 x 轴从 100 递增到 100000
  • @Josh 听起来您更像是正在看到“对数”图表,但您为 y 标度做出了一些糟糕的选择。但就像calc_error 问题一样,如果没有实际的数据摆在我们面前,我不确定您希望我们如何提供帮助。
【解决方案2】:

我猜你想要这样的东西:

i <- 1
h <- 0.01
err <- vector(0,mode="numeric")

while (h[i] > .00001) {
  x <- rnorm(1,mean=0.5,sd=0.05) #use calc_error instead
  err <- c(err,x - (exp(-.02)*0.5))
  i <- i+1
  h <- c(h,h[i-1]/10) }

plot(1/h[-length(h)],err,log="x")

【讨论】:

  • Sven 的代码当然更好(或者至少更符合 R 的精神),但您可能更熟悉 while 循环。
【解决方案3】:

这应该是创建情节的简单方法:

h <- 10^-seq(2, 4)
err <- lapply(h, function(x) calc_error(x, 0, -5) - (exp(-.02) * .5))
plot(1/h, err, log = "x")

【讨论】:

  • 您好,感谢您的帖子。我在网上搜索了函数 lapply,但我对它的工作原理/何时使用它有点困惑。此外,在调用 lapply(h, function(x), calc_error(x, 0, -5) - [...] 为什么你使用“x”而不是“h”,因为我们正在改变 x 的值,还是类似于“按值传递”
  • 函数应用于向量h的所有值。 x 表示单个值,因为我将该函数定义为 x (function(x)) 的函数。基本上,h 是整体,但函数单独应用于每个元素。
  • 另外,当我使用 lapply 函数时,它会显示每一步的计算,有没有隐藏它?
  • @Josh 这是由于您的函数中的print 命令。只需删除行print(temp_val, digits = 12),您将看不到输出。
  • 是否有允许我编辑函数的命令?比如编辑什么的?问题是我在 Ubuntu 上有一个非常奇怪的 R 版本,我使用终端访问它(通过键入 R)。我不知道如何访问我已经创建的函数,所以我必须创建新的。
猜你喜欢
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
  • 2020-11-19
  • 1970-01-01
  • 2012-05-10
  • 2017-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多