我正在绘制散点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])将仍然被绘制,同时保持对数比例。
附注:我认为通过一个例子来讨论一个非常合理的帖子是不公平的。这显然是关于主题和相关的,并且几乎每个人都会在日志值上绘制事物并关注边界/边缘情况。
(我知道有些人通过在所有点添加一个任意的小常量来解决这个问题,但是我想避免它,因为它很麻烦。)谢谢
答案 0 :(得分:1)
如果我了解你想在对数刻度中绘制x与y的关系?
此处以及使用lattice
和latticeExtra
# 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
)