我在对数转换的轴上绘制数据,并且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)
获取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)