在R中处理零日志值?

在R中处理零日志值?,r,graphics,plot,statistics,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(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))
由于x[0],y[0]被省略(x值为0),因此仅绘制了5个。因此,我希望绘制对数值,但将记号标签设置为自然数,只需在对数刻度上进行标记。然后你可以很容易地在同一个轴上,0,2^0(当然是1),2^1,2^2,等等。然后点(x[0],y[0])仍将绘制,同时保持对数比例

旁注:我认为用一个例子否决一篇要求非常合理的帖子是不公平的。这显然是关于主题的,并且是相关的,几乎每个在对数值上绘制东西并关心边界/边缘情况的人都会想到这一点


(我知道有些人通过在所有点上添加一个任意的小常数来处理这个问题,但我想避免这样做,因为它很混乱。)如果我知道你想在对数刻度中绘制x与y的关系,谢谢你

下面是使用
lattice
latticeCextra

# 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 
) 
#一些可复制的数据

tm示例代码会很好。您看过“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。这是什么意思?在2^0、2^1等的刻度上,0会在哪里?(除非-这些是整数值吗?)