处理R中的零日志值?

时间:2013-02-06 01:35:46

标签: r graphics plot statistics

我正在绘制散点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])将仍然被绘制,同时保持对数比例。

附注:我认为通过一个例子来讨论一个非常合理的帖子是不公平的。这显然是关于主题和相关的,并且几乎每个人都会在日志值上绘制事物并关注边界/边缘情况。

(我知道有些人通过在所有点添加一个任意的小常量来解决这个问题,但是我想避免它,因为它很麻烦。)谢谢

1 个答案:

答案 0 :(得分: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 
) 

enter image description here