3

我正在绘制一个散点图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])仍将被绘制,同时保持对数刻度。

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

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

4

1 回答 1

1

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

这里和示例使用latticeandlatticeExtra

# 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 
) 

在此处输入图像描述

于 2013-02-06T01:48:03.807 回答