Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R ggplot2:勾选标签作为基数e指数_R_Ggplot2 - Fatal编程技术网

R ggplot2:勾选标签作为基数e指数

R ggplot2:勾选标签作为基数e指数,r,ggplot2,R,Ggplot2,我正在对数变换轴上绘制数据,ggplot中的默认值是使用刻度标签的指数。但是,我希望包含基数e,以便勾号标签显示为“e^n”。有人知道我怎么做吗?我可以找到基数为10的指数(例如)的解,但不能找到基数为e的解。我尝试过修改基数为10的解决方案,以获得基数为e的指数,但它对我不起作用 此示例显示默认行为: library(ggplot2) df <- data.frame(x=c(10, 100), y=c(400, 23000)) ggplot(df, aes(x=x, y=log(y))

我正在对数变换轴上绘制数据,ggplot中的默认值是使用刻度标签的指数。但是,我希望包含基数e,以便勾号标签显示为“e^n”。有人知道我怎么做吗?我可以找到基数为10的指数(例如)的解,但不能找到基数为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()
但是我希望这些标签显示为
e^n
。有人能给我指一下正确的方向吗

编辑:Didzis的解决方案工作得很好,但当使用较小的y范围时,如下图所示

df <- data.frame(x=c(10, 100), y=c(400, 3000))
但这并不奏效

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()
从库
scales
获取所需标签。另外,要获取日志比例,请在
scales.
函数中使用参数
trans=“log”
(不要在
aes()
中获取数据的
log()


谢谢迪兹!这是向前迈出的一大步,但解决方案是否存在一些小问题?例如,最低y值为e^1.8,但应为e^6。看起来好像您的解决方案正在对已经记录的值进行自然记录。我应该使用另一个转换而不是“log”吗?我试着“连续”,但它出错了。谢谢问题是在您的示例中,您在aes()中获取了y的log(),因此在打印之前更改了y值的范围。从aes()中删除log()按预期获取最小值谢谢Didzis-好的,我看到了我的错误。您的解决方案非常有效!然而,当使用较小的y范围时,指数显示为小数。我需要降低精度-有没有办法做到这一点?我用一个例子更新了我原来的帖子。谢谢亲爱的Didzis-我能够通过在trans_breaks中使用参数n设置中断次数来解决问题。再次感谢你的帮助!
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)))
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)))
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)))