2

因为 y 值太小,我需要对 y 轴使用对数刻度来显示差异。在数据中,一些条目没有任何值 (0)。有没有办法在 y 轴上显示“0”?

y=c(0.1, 0.001, 0.00001, 0.0000001, 0.000000001, 0)
x=c(1, 2, 3, 4, 5, 6)
plot(x, y, log="y");

谢谢

4

3 回答 3

3

我发现自己在做类似的事情,但也完全不同。对于在这里偶然发现的人来说,我所做的可能会有一些用处。

我遇到的问题是我有非常大的数字,我想以对数刻度显示,但也有一些零。我使用了条形图并将 NA 用于 0。事实证明,NA 被留作空白空间,我认为在这种情况下是有道理的。我举了一个只有 10 个数字的例子,但 R 似乎可以很好地处理更多值的缩放:

values<-c(100000, 100, 2, 5, NA, NA, 2, 1, NA, 1)
barplot(values, names=1:length(values), log="y")

说明性图像

于 2013-01-25T13:08:21.343 回答
2

如果我正确理解您的问题,您想要的是 0(零),只是为了显示在 y 轴上

这个怎么样

y=c(0.1, 0.001, 0.00001, 0.0000001, 0.000000001, 0.0000000001)
x=c(1, 2, 3, 4, 5, 6)
plot(x, y, log="y",yaxt="n")
axis(2,at=c(0.1, 0.001, 0.00001, 0.0000001, 0.000000001, 0.0000000001) ,labels=c(0.1, 0.001, 0.00001, 0.0000001, 0.000000001,"0"))

在此处输入图像描述

plot yaxt="n"禁用y轴的绘制然后我手动绘制y轴axis并使用参数设置ticks位置at。然后我将我拥有的最低值(在你的情况下为 0.0000000001)设置为字符 "0"(在label参数处)

于 2013-01-13T23:45:54.680 回答
1

选择一些最小值,并用它来表示 0:

m <- min(y[y!=0])/10
plot(x, pmax(y, m), log="y")

在此处输入图像描述

于 2013-01-13T23:13:08.010 回答