r - 在 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 one或this one)只是将 log="y" 添加到 plot 参数中,这对我的负面数据不起作用。
基本上,我不知道如何强制 R 使用 10、1、-1、-10、-100 等轴标签进行绘图,并能够绘制具有相同数值的点。
解决方案
转换可能会在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) 向你的听众解释它的含义,否则我可能只会按常规规模绘制它,即使它看起来很丑。
推荐阅读
- python - 如何解析看起来像 JSON 但不是的文件
- apache-nifi - 我想使用 nifi 将文本转换为 JSON 格式
- php - 如何在 phpExcel 中将数组打印为行和列?
- memory - 在 Erlang 中测量内存性能
- android-studio - NativeActivity 中的方向变化
- javascript - How to use MutationObserver with an Object?
- docker - Clojure 热重载
- python - 基础文本挖掘。我收到一个 UicodeencoderError
- r - 如何在 R 中自定义 rhandsontable 标头?
- java - 来自 jacoco 的 java.lang.NoSuchFieldException 错误