R 我需要ggplot scale_x_log10()将负数和正数作为输出
我在这里生成了一个包含正数和负数的精细直方图R 我需要ggplot scale_x_log10()将负数和正数作为输出,r,plot,ggplot2,histogram,R,Plot,Ggplot2,Histogram,我在这里生成了一个包含正数和负数的精细直方图 x <- rnorm(5000,0,1000) library(ggplot2) df <- data.frame(x) ggplot(df, aes(x = x)) + geom_histogram() 我真正想要的是记号和记号之间的间距遵循对数模式,并且x轴上0的任一侧是彼此的镜像,但我似乎无法得到 这可以通过定义一个新的转换来实现(一个“有符号的日志”、符号(x)*log(abs(x));建议的可能更具原则性,或者如上面的评论中
x <- rnorm(5000,0,1000)
library(ggplot2)
df <- data.frame(x)
ggplot(df, aes(x = x)) + geom_histogram()
我真正想要的是记号和记号之间的间距遵循对数模式,并且x轴上0的任一侧是彼此的镜像,但我似乎无法得到 这可以通过定义一个新的转换来实现(一个“有符号的日志”、
符号(x)*log(abs(x))
;建议的可能更具原则性,或者如上面的评论中所建议的一个有符号的平方根),但我怀疑这是否是一个好主意。然而(“教一个人钓鱼,你就可以养活他一辈子;给他一根绳子,他就可以上吊了……”。。。您可以通过trans\u new
定义自己的轴变换,如下所示
设置:
library(ggplot2); theme_set(theme_bw())
set.seed(101)
df <- data.frame(x=rnorm(5000,0,1000))
现在看直方图:
ggplot(df, aes(x = x)) + geom_histogram()+
scale_x_continuous(trans=weird)
你应该担心的事情:
- 当值介于-1和1之间时,这种转换将是毫无意义的
- 您可能需要担心在不适当缩放仓位高度的情况下变换直方图的轴:这可能会给您一个概率密度的误导性印象——尽管在这种情况下,
看起来与上面的图大致相同ggplot(df,aes(x=wird$transform(x))+geom_histogram()
中给出了一个错误,很抱歉,但这还不足以解决您的问题。如果您只想在GGPUT之外进行转换(更简单),定义<代码> SigndLog,我也会考虑在转换中使用<代码> Log1P< <代码>和<代码> ExpM1<代码>。
weird <- scales::trans_new("signed_log",
transform=function(x) sign(x)*log(abs(x)),
inverse=function(x) sign(x)*exp(abs(x)))
ggplot(df,aes(x,x))+geom_point()+
scale_y_continuous(trans=weird)
ggplot(df, aes(x = x)) + geom_histogram()+
scale_x_continuous(trans=weird)