在R中绘制倍数变化比例

时间:2018-06-23 03:46:01

标签: r ggplot2 graph scale

我拥有的数据每个点的取值范围是2000到-2000。

通常,简单的修复方法只是简单地绘制数据日志。但是,这里我同时具有正值和负值,并且不确定如何缩放数据。

例如,我的数据如下:

x = c(5 ,-2, -3, -10, -15, -2000)

使用boxplot(x)进行简单绘制会产生未缩放且难以读取的boxplot:

Unscaled, difficult to read boxplot

我发现了this answer,它使我可以将轴重新标记为所需的位置,但实际上并没有合并数据以对其进行绘图。我正在寻找的东西是这样的:

labels=expression(1, -1, -10, -100, -1000)
boxplot(boxplot(c(10,10,10,10,-1,-1.5,-3,-1), yaxt="n"))

Something that looks like what I want

如您所见,轴由折叠标记(例如10、1,-1,-10,-100)。但是,为了实际绘制某些内容,我不能使用这些标签,因为我所做的只是重命名了标签。我见过的所有其他替代方法(例如This oneor this one)都只是向plot参数添加log =“ y”,这对我的负数数据无效。

基本上,我无法弄清楚如何强制R使用轴标签(如10、1,-1,-10,-100)进行绘图,以及如何以相同的数值绘制点。

1 个答案:

答案 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)
  )

enter image description here

从数学上讲,它可以完成工作-执行类似log的转换,但是可以处理负值。那是很好的部分。不好的部分是我很难解释这张图。箱线图在这种规模上意味着什么?尚不清楚,因此除非您觉得自己可以:1)理解这种规模的数据,以及2)向您的听众解释其含义,即使看起来很难看,我也可能只是按常规比例绘制。