首页 > 解决方案 > 在 R 中绘制倍数变化比例

问题描述

我有数据,每个点的值都在 2000 到 -2000 之间。

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

例如,我有如下数据:

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

简单地使用 boxplot(x) 绘制会产生一个未缩放的、难以阅读的箱线图:

未缩放,难以阅读的箱线图

我找到了这个答案,它可以让我将轴重新标记为我想要的,但实际上并没有合并数据来绘制它。我正在寻找的是这样的:

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 onethis one)只是将 log="y" 添加到 plot 参数中,这对我的负面数据不起作用。

基本上,我不知道如何强制 R 使用 10、1、-1、-10、-100 等轴标签进行绘图,并能够绘制具有相同数值的点。

标签: rggplot2graphscale

解决方案


转换可能会在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)
  )

在此处输入图像描述

从数学上讲,它完成了这项工作 - 它执行类似对数的转换,但它可以处理负值。这是好的部分。不好的部分是我很难解释这个图表。箱线图在这个尺度上意味着什么?目前还不清楚,所以除非你觉得你可以 1) 理解这个规模的数据 2) 向你的听众解释它的含义,否则我可能只会按常规规模绘制它,即使它看起来很丑。


推荐阅读