我拥有的数据每个点的取值范围是2000到-2000。
通常,简单的修复方法只是简单地绘制数据日志。但是,这里我同时具有正值和负值,并且不确定如何缩放数据。
例如,我的数据如下:
x = c(5 ,-2, -3, -10, -15, -2000)
使用boxplot(x)进行简单绘制会产生未缩放且难以读取的boxplot:
我发现了this answer,它使我可以将轴重新标记为所需的位置,但实际上并没有合并数据以对其进行绘图。我正在寻找的东西是这样的:
labels=expression(1, -1, -10, -100, -1000)
boxplot(boxplot(c(10,10,10,10,-1,-1.5,-3,-1), yaxt="n"))
如您所见,轴由折叠标记(例如10、1,-1,-10,-100)。但是,为了实际绘制某些内容,我不能使用这些标签,因为我所做的只是重命名了标签。我见过的所有其他替代方法(例如This one,or this one)都只是向plot参数添加log =“ y”,这对我的负数数据无效。
基本上,我无法弄清楚如何强制R使用轴标签(如10、1,-1,-10,-100)进行绘图,以及如何以相同的数值绘制点。
答案 0 :(得分:1)
asinh
转换可以直观地满足您的需求。
library(magrittr)
library(ggplot)
df <- data_frame(
y = seq(-2000, 2000, length.out = 10),
y_trans = asinh(y)
) %T>%
as.matrix() %>%
t() %>%
print()
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# y -2000.00000 -1555.555556 -1111.111111 -666.666667 -222.22222 222.22222 666.666667 1111.111111 1555.555556 2000.00000
# y_trans -8.29405 -8.042735 -7.706263 -7.195438 -6.09683 6.09683 7.195438 7.706263 8.042735 8.29405
df %>%
ggplot(aes(y = y), x = 1) +
geom_boxplot() +
scale_y_continuous(
trans = trans_new("asec", asinh, sinh),
breaks = c(-2000, -200, -20, -2, 0, 2, 20, 200 , 2000)
)
从数学上讲,它可以完成工作-执行类似log的转换,但是可以处理负值。那是很好的部分。不好的部分是我很难解释这张图。箱线图在这种规模上意味着什么?尚不清楚,因此除非您觉得自己可以:1)理解这种规模的数据,以及2)向您的听众解释其含义,即使看起来很难看,我也可能只是按常规比例绘制。