r – ggplot2:将标签标记为基本e指数

我在对数转换轴上绘制数据,ggplot中的默认值是使用指针标记.但是,我想包括基数e,以便刻度标签显示为“e ^ n”.有谁知道我怎么做到这一点?我可以找到基数为10的指数(例如
Pretty axis labels for log scale in ggplot)的解,但不能找到基数e的解.我已经尝试修改基础10解决方案以获得基础e指数,但它不适合我.

此示例显示默认行为:

library(ggplot2)
df <- data.frame(x=c(10, 100), y=c(400, 23000))
ggplot(df, aes(x=x, y=log(y)))+geom_line()

我可以使用科学格式表示刻度标签

ggplot(df, aes(x=x, y=log(y)))+geom_line()+scale_y_continuous(label=scientific)

但我反而希望这些标签显示为e ^ n.任何人都能指出我在正确的方向吗?

编辑:Didzis的解决方案工作得很好,但是当使用较小的y范围时,例如这个

df <- data.frame(x=c(10, 100), y=c(400, 3000))

刻度以小数形式出现(例如e ^ 6.5)而不是整数(例如e ^ 6,e ^ 7).我如何强制ggplot只使用整数?我试过了

ggplot(df, aes(x=x, y=y))+geom_line()+
+     scale_y_continuous(trans="log",breaks = trans_breaks("log", function(x) exp(x), by=1),
+                        labels = trans_format("log", math_format(e^.x)))

但那没用.

EDIT2:我能够通过设置休息次数来解决这个问题:

ggplot(df, aes(x=x, y=y))+geom_line()+
scale_y_continuous(trans="log",breaks = trans_breaks("log", function(x) exp(x), n=3),
                   labels = trans_format("log", math_format(e^.x)))

最佳答案 要获得e ^ n标签,请使用scale_y_continuos(),然后使用库缩放中的trans_breaks()和trans_format()来获取所需的标签.另外要获取log scale使用参数trans =“log”在scale _…函数内(不要在aes()中使用log()数据).

library(scales)
ggplot(df, aes(x=x, y=y))+geom_line()+
  scale_y_continuous(trans="log",breaks = trans_breaks("log", function(x) exp(x)),
                labels = trans_format("log", math_format(e^.x)))
点赞