在R中标记对数刻度显示

Posted

技术标签:

【中文标题】在R中标记对数刻度显示【英文标题】:Labelling logarithmic scale display in R 【发布时间】:2011-10-17 08:32:27 【问题描述】:

在 R 中绘制直方图、散点图和其他坐标轴缩放为对数刻度的图时,如何使用 10^-1 10^0 10^1 10^2 10^3 等标签而不是轴仅显示 -1、0、1、2、3 等。应该在 hist()、plot() 等命令中添加哪些参数?

【问题讨论】:

ggplot2 如果您在 ggplot2 中进行对数转换,则会自动执行此操作。请参阅本页底部的示例:had.co.nz/ggplot2/geom_boxplot.html 谢谢,这帮助了我。另外,我在这里也发现了一些非常有用的东西r.789695.n4.nabble.com/log-y-axis-of-histogram-td2399498.html 【参考方案1】:

除了 ggplot2 的解决方案(参见 gsk3 的评论),我想补充一点,当使用正确的参数时,这也会在 plot() 中自动发生,例如:

x <- 1:10
y <- exp(1:10)
plot(x,y,log="y")

您可以将参数log="x" 用于X 轴,或log="xy" 用于两者。

如果你想格式化数字,或者你有日志格式的数据,你可以使用axis()来解决。一些有趣的功能:

axTicks(x) 为您提供刻度在 X 轴 (x=1) 或 Y 轴 (x=2) 上的位置 bquote() 将表达式转换为语言,但可以将变量替换为其值。有关bquote() 的更多信息,请参见问题Latex and variables in plot label in R?。 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)

这给了

【讨论】:

谢谢,这非常有用,我认为它是一个通用的解决方案。为我工作得很好【参考方案2】:

这是绘制此类轴的另一种方法:

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)

编辑:这也在latticeExtrascale.components 中得到解决

【讨论】:

【参考方案3】:

在ggplot2中你可以添加一个

... + 
scale_x_log10() + 
scale_y_log10(limits = c(1e-4,1), breaks=c(1e-4,1e-3,1e-2,0.1,1)) + ...

要缩放您的轴,标记它们并添加自定义中断。

【讨论】:

以上是关于在R中标记对数刻度显示的主要内容,如果未能解决你的问题,请参考以下文章

Matplotlib 对数刻度刻度标签数字格式

R语言ggplot2可视化使用axis.ticks.length函数设置坐标轴间隔标签竖线的长度并设置坐标轴间隔标签在图像内部(刻度标记放置在图像内部)

将线拟合到 R 中对数刻度上的数据

减少 Flex 图表上轴标签和刻度标记之间的填充

使用文本标记最小和最大刻度填充渐变图例:ggplot2

用 ggplot2 注释 R 中的矩形以获得对数刻度的图形