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

时间:2014-01-11 16:49:51

标签: r ggplot2

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

1 个答案:

答案 0 :(得分:2)

要将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)))

enter image description here