Jim*_* Bo 7 r histogram ggplot2
我有一个包含一些异常值的数据集,如下所示
x <- rnorm(1000,0,20)
x <- c(x, 500, -500)
Run Code Online (Sandbox Code Playgroud)
如果我们在线性x轴刻度上绘制这个,我们看到
histogram(x)
Run Code Online (Sandbox Code Playgroud)

我使用这个有用的线程编写了一个很好的方法将它放在对数刻度上: 如何在R中使用直方图的y轴的对数刻度?:
mat <- data.frame(x)
ggplot(ee, aes(x = xx)) + geom_histogram(colour="darkblue", size=1, fill="blue") + scale_x_log10()
Run Code Online (Sandbox Code Playgroud)

但是,我希望第二个例子中的x轴标签与第一个例子的x轴标签相匹配,除了一种"负日志" - 即第一个标记(从中心向左移动)可以是-1,然后是接下来可能是-10,下一个-100,但都是等距的.那有意义吗?
Mat*_*agg 16
我不确定我理解你的目标,但是当你想要一个类似于日志的变换但是有零或负值时,反双曲正弦变换asinh()通常是一个不错的选择.对于大值,它是类似日志的,并且是针对所有实际值定义的.有关讨论,详细信息和其他选项,请参阅有关stats.stackexchange.com的Rob Hyndman的博客和此问题.
如果这是一种可接受的方法,您可以为ggplot创建自定义比例.下面的代码演示了如何创建和使用自定义比例(使用自定义中断),以及asinh()转换的可视化.
library(ggplot2)
library(scales)
limits <- 100
step <- 0.005
demo <- data.frame(x=seq(from=-1*limits,to=limits,by=step))
asinh_trans <- function(){
trans_new(name = 'asinh', transform = function(x) asinh(x),
inverse = function(x) sinh(x))
}
ggplot(demo,aes(x,x))+geom_point(size=2)+
scale_y_continuous(trans = 'asinh',breaks=c(-100,-50,-10,-1,0,1,10,50,100))+
theme_bw()
Run Code Online (Sandbox Code Playgroud)

ggplot(demo,aes(x,x))+geom_point(size=2)+
scale_x_continuous(trans = 'asinh',breaks=c(0,1,10,50,100))+
scale_y_log10(breaks=c(0,1,10,50,100))+ # zero won't plot
xlab("asinh() scale")+ylab("log10 scale")+
theme_bw()
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
9902 次 |
| 最近记录: |