如何在R语言中绘制以对数刻度为比例的直方图、散点图等图形时,使用10^-1 10^0 10^1 10^2 10^3等标签,而不是只显示-1、0、1、2、3等轴标签?在hist()、plot()等命令中应添加哪些参数?
如何在R语言中绘制以对数刻度为比例的直方图、散点图等图形时,使用10^-1 10^0 10^1 10^2 10^3等标签,而不是只显示-1、0、1、2、3等轴标签?在hist()、plot()等命令中应添加哪些参数?
除了 ggplot2 的解决方案(参见 gsk3 的评论)之外,我想补充一下,在 plot() 中正确使用参数时也会自动发生这种情况,例如:
x <- 1:10
y <- exp(1:10)
plot(x,y,log="y")
您可以在 X 轴上使用参数 log="x"
,或是在两个轴上使用参数 log="xy"
。
如果您想要格式化数字,或者您的数据已经是对数格式,您可以通过使用 axis() 来进行一些绕开的操作。以下是一些有趣的函数:
axTicks(x)
可以生成 X 轴(x=1)或 Y 轴(x=2)刻度线的位置。bquote()
将表达式转换为语言,但可以将变量替换为其值。更多关于 bquote()
的信息,请参见问题R 中图表标签中的 Latex 和变量?。as.expression()
使来自 bquote()
的语言对象成为表达式。这允许 axis()
如 ?plotmath
所解释的那样进行格式化。它无法处理语言对象。下面是一个好看的格式化的例子:
x <- y <- 1:10
plot(x,y,yaxt="n")
aty <- axTicks(2)
labels <- sapply(aty,function(i)
as.expression(bquote(10^ .(i)))
)
axis(2,at=aty,labels=labels)
这会给出:
这里有一种不同的方法来绘制这种类型的坐标轴:
plot(NA, xlim=c(0,10), ylim=c(1, 10^4), xlab="x", ylab="y", log="y", yaxt="n")
at.y <- outer(1:9, 10^(0:4))
lab.y <- ifelse(log10(at.y) %% 1 == 0, at.y, NA)
axis(2, at=at.y, labels=lab.y, las=1)
编辑:这也可以在latticeExtra
中用scale.components
解决。
... +
scale_x_log10() +
scale_y_log10(limits = c(1e-4,1), breaks=c(1e-4,1e-3,1e-2,0.1,1)) + ...
为了缩放您的轴,给它们标签并添加自定义间断点。