R情节,如何在非零处开始?

时间:2018-06-05 20:04:29

标签: r plot

我有一组数据来自:8e41到〜1e44。我想在y轴上从1e41开始绘制,但使用参数:ylim=c(1e41,1e45)对我不起作用。

这是最低限度可重复的代码:

x = c(1,2)
y = c(1e41,1e44)
plot(x,y,ylim=c(1e41,1e45))

2 个答案:

答案 0 :(得分:2)

问题是1e41比1e45更接近于0,它实际上是相同的。你考虑过在日志范围内工作吗?

plot(x,y,ylim=c(1e41,1e45), log = 'y')

甚至

plot(x, y, log = 'y')

想想另一种方式 - 通过将范围除以1e41来重新缩放数据:c(8e41, 1e44)/ 1e41 - 得到8和1000.在0(或1)与8开始比例之间是否有任何显着差异?如果你选择除以1e40,你会看到80和10,000。请尝试以下代码来查看:

m <- 1e41 # change this as desired
plot(x, y / m)
abline(h = c(0, 1e41 / m))

通过更改m,唯一改变的是y轴上的数字,相对位置不会改变。看看0和8e41的接近程度,你就会明白为什么情节是否从0开始对1e41无关紧要。作为图的总高度的一部分,差异是1/1000。

更改轴标记的值

这里还有一个选项 - 更改标记图表的值。这需要两个步骤 - 首先,在最初创建绘图时删除轴标签,然后添加您真正想要的那些:

plot(x, y, yaxt = 'none')
axis(2, c(1e41, seq(1e43, 1e44, 1e43)))

答案 1 :(得分:0)

library(ggplot2)
x = c(1,2)
y = c(1e41,1e44)
data = data.frame(x,y)
ggplot(data, aes(x=x, y=log(y))) + geom_point() + ylim(90,150)

我认为您应该使用y的日志,因为它显示相同的数据。