ggplot2:刻度标记作为基本e指数

Tho*_*mas 5 r ggplot2

我在对数转换的轴上绘制数据,并且ggplot中的默认设置是对刻度标签使用指数。但是,我想包括基数e,以便刻度标签显示为“ e ^ n”。有人知道我该怎么做吗?我可以找到以10为底的指数的解决方案(例如,ggplot中的对数刻度的漂亮轴标签),但是没有以e为底的解决方案。我曾尝试修改base 10解决方案以获取base e指数,但是它不适用于我。

此示例显示默认行为:

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

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

ggplot(df, aes(x=x, y=log(y)))+geom_line()+scale_y_continuous(label=scientific)
Run Code Online (Sandbox Code Playgroud)

但我反而希望这些标签显示为e^n。有人可以在这里指出正确的方向吗?

编辑:Didzis的解决方案完美地工作,但当使用这样的较小的y范围时

df <- data.frame(x=c(10, 100), y=c(400, 3000))
Run Code Online (Sandbox Code Playgroud)

刻度线以小数(例如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)))
Run Code Online (Sandbox Code Playgroud)

但这没有用。

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)))
Run Code Online (Sandbox Code Playgroud)

Did*_*rts 3

获取e^n使用的标签scale_y_continuos(),然后使用trans_breaks()trans_format()从库中scales获取所需的标签。另外,为了获取对数刻度,请在函数trans="log"内部使用参数scales_...(不要log()在 内部获取数据aes())。

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)))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述