gpt4 book ai didi

r - R中 "negative"对数刻度的直方图

转载 作者:行者123 更新时间:2023-12-04 09:52:38 27 4
gpt4 key购买 nike

我有一些异常值的数据集,例如以下

x <- rnorm(1000,0,20)
x <- c(x, 500, -500)

如果我们以此绘制在线性x轴刻度上,我们将看到
histogram(x)

我想出了一个很好的方法,使用这个有用的线程将其放在对数刻度上:
how to use a log scale for y-axis of histogram in R?:
mat <- data.frame(x)
ggplot(ee, aes(x = xx)) + geom_histogram(colour="darkblue", size=1, fill="blue") + scale_x_log10()

但是,我希望第二个示例中的x轴标签与第一个示例中的x轴标签匹配,除了带有一种“负对数”之外-即第一个刻度(从中心向左移动)可以为-1,然后下一个可能是-10,下一个可能是-100,但都相等。那有意义吗?

最佳答案

我不确定我是否理解您的目标,但是当您想要类似对数的转换但具有零或负值时,反双曲正弦转换asinh()通常是一个不错的选择。对于大值,它类似于对数,并为所有实值定义。有关讨论,详细信息和其他选项,请参见Rob Hyndman's blogthis question on stats.stackexchange.com

如果这是可接受的方法,则可以为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()
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()

关于r - R中 "negative"对数刻度的直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14504869/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com