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