【问题标题】:Dealing with zero log values in R?处理 R 中的零日志值?
【发布时间】:2013-01-21 03:00:29
【问题描述】:

我正在绘制一个散点图plot(x, y) 并希望它是对数值,所以我这样做了:plot(log(x), log(y))。我想处理x 中的某个值为0,因此不在绘图上,而相应的y 值非零的情况。

我想显示带有对数刻度但自然数值的散点图,这意味着如果在 log2 中,那么刻度应该是 2^0, 2^1, 2^2, ...,这将允许我在刻度上绘制 0 值,以免错过这些点。

这是一个例子:

> x = c(0, 1, 20, 100, 200, 500)
> y = c(1, 16, 32, 105, 300, 50)
> plot(x, y)

有六点。如果我使用:

> plot(log2(x), log2(y))

只有 5 个被绘制,因为 x[0], y[0] 被省略(x 值为 0)。因此,我想绘制对数值,但刻度标签是自然数,简单地标记在对数刻度上。然后你可以很容易地在同一个轴上,0、2^0(当然是1)、2^1、2^2等等。然后点 (x[0], y[0]) 仍会被绘制,同时保持对数刻度。

旁注:我认为通过一个例子来对一个要求非常合理的帖子投反对票是不公平的。这显然是主题和相关的,并且几乎适用于所有在对数值上绘制事物并关心边界/边缘情况的人。

(我知道有些人会通过在所有点上添加一个任意的小常数来解决这个问题,但我想避免这种情况,因为它很混乱。)谢谢

【问题讨论】:

  • 示例代码会很好。你看过'log1p()'和'expm1()'吗?
  • 我确实给出了示例代码。我的代码只是 plot(x,y)plot(log2(x), log2(y)) 仅此而已。
  • 在轴上包含2^0 如何让您包含零值? 2^0 是 1
  • @DavidRobinson:我不是这么说的。我说用自然比例绘制它,2^0,...,2^N 可以让我得到 0。如果它是自然比例,0 点是有意义的。如果这些值为 -1、0、1、2 并且是 log2 值,则 0 点为 1,因此无法绘制自然数 0。
  • 什么意思? 0 在具有 2^0、2^1 等的尺度上会在哪里? (除非 - 这些是整数值吗?)

标签: r graphics plot statistics


【解决方案1】:

如果我理解您想在对数刻度中绘制 x 与 y?

这里是使用latticelatticeExtra的例子

# Some reproducible data
tm <- data.frame(x=seq(0,10,1),y=seq(0,10,1))
library(lattice) 
library(latticeExtra) 
xyplot(x ~ y , data=tm, 
       scales= list(x=list(log=2), 
                    y=list(log=2)), 
       xscale.components = xscale.components.logpower, ## to get pretty scales
        yscale.components = yscale.components.logpower 
) 

【讨论】:

    猜你喜欢
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 2012-12-28
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    相关资源
    最近更新 更多