我想使用ggplot2使用反向的log10 x比例绘制图:

require(ggplot2)
df <- data.frame(x=1:10, y=runif(10))
p <- ggplot(data=df, aes(x=x, y=y)) + geom_point()

但是,看来我可以对数刻度或反向刻度:
p + scale_x_reverse() + scale_x_log10()
p + scale_x_reverse()

我想这是合乎逻辑的,如果一层只能有一个比例。当然,我可以自己对数据框执行日志转换df$xLog <- log10(df$x)来破解它
但是该解决方案似乎与ggplot的精神背道而驰。有没有一种方法可以在不进行ggplot调用外部进行数据转换的情况下获得这种绘图?

最佳答案

@joran在其评论中给出的链接给出了正确的想法(构建您自己的转换),但是相对于scales现在使用的新ggplot2包而言已过时。查看scales软件包中的log_transreverse_trans以获得指导和启发,可以创建reverselog_trans函数:

library("scales")
reverselog_trans <- function(base = exp(1)) {
    trans <- function(x) -log(x, base)
    inv <- function(x) base^(-x)
    trans_new(paste0("reverselog-", format(base)), trans, inv,
              log_breaks(base = base),
              domain = c(1e-100, Inf))
}

这可以简单地用作:
p + scale_x_continuous(trans=reverselog_trans(10))

给出了情节:

使用略有不同的数据集来显示该轴肯定是反向的:
DF <- data.frame(x=1:10,  y=1:10)
ggplot(DF, aes(x=x,y=y)) +
  geom_point() +
  scale_x_continuous(trans=reverselog_trans(10))

关于r - 如何在ggplot2中获得反转的log10刻度?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11053899/

10-12 17:36