【问题标题】:Plotting a fold-change scale in R在 R 中绘制倍数变化比例
【发布时间】:2018-12-02 12:17:05
【问题描述】:

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

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

例如,我有如下数据:

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

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

我找到了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 oneor this one)只需将 log="y" 添加到 plot 参数中,这不适用于我的负面数据。

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

【问题讨论】:

    标签: r ggplot2 graph scale


    【解决方案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)
      )
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-25
      • 2019-07-05
      • 1970-01-01
      相关资源
      最近更新 更多