R boxplot - 如何针对给定的上限和下限而不是最小值和最大值进行归一化
R boxplot - how to normalize against given high and low limits instead of min and max
我有几个测量值,尽管比例完全不同,但它们需要在同一个箱线图中显示。每个组(=测量类型)都有自己特定的高和低可接受限度。
数据应在 R 中标准化,以便所有组的下限始终为 -1,上限始终为 +1。然后我将设置 Y 轴,以便正确显示所有测量值。
到目前为止,我已经设法绘制了 min(NUM_VALUE) 为 -1 和 max(NUM_VALUE) 为 +1 的箱线图,但这不是我想要的最终结果。
假数据(只是table的一部分):
ITEMID NAME SERIALID NUM_VALUE LOWER_LIMIT UPPER_LIMIT
Itemcode1 group1 SN1000 62.1 50 80
Itemcode1 group1 SN1001 62.6 50 80
Itemcode1 group1 SN1002 63.9 50 80
Itemcode1 group2 SN1006 1526.79 1526 1528
Itemcode1 group2 SN1007 1526.799 1526 1528
Itemcode1 group3 SN1015 1815.09 1814 1816
Itemcode1 group3 SN1016 1815.094 1814 1816
Itemcode1 group3 SN1017 1815.098 1814 1816
Itemcode1 group4 SN1025 1526.751 1526 1527
Itemcode1 group4 SN1026 1526.62 1526 1527
Itemcode1 group5 SN1028 1816.155 1816 1817
Itemcode1 group5 SN1029 1816.245 1816 1817
R代码:
library(ggplot2)
library(data.table)
df <- read.table("data3.csv", header=TRUE, sep=";", stringsAsFactors=FALSE)
skl <- function(x){(x-min(x))/(max(x)-min(x))*2-1}
df <- transform(df,scaled=ave(df$NUM_VALUE,df$NAME,FUN=skl))
ggplot(df, aes(x=df$NAME, y = df$scaled)) + geom_boxplot()
到目前为止的图表:
boxplot
我是 R 的新手。
问题:如何根据 UPPER_LIMIT 和 LOWER_LIMIT 按组缩放箱线图并将其全部显示在同一张图中?
非常感谢任何帮助,谢谢!
除了使用 min()
和 max()
,您还可以将函数 skl()
更改为也使用 lower
和 upper
边界。
适配函数如下所示:
skl <- function(x, lower, upper){
(x - lower)/(upper - lower) * 2 - 1
}
您可以使用 apply()
遍历 data.frame
的行:
df$scaled <- apply(df[, 4:6], 1, function(row) {
skl(x = row[1], lower = row[2], upper = row[3])
})
结果如下所示:
df$scaled
[1] -0.19333333 -0.16000000 -0.07333333 -0.21000000 -0.20100000 0.09000000 0.09400000 0.09800000
[9] 0.50200000 0.24000000 -0.69000000 -0.51000000
使用您的代码,箱线图将如下所示:
library(ggplot2)
ggplot(df, aes(x=df$NAME, y = df$scaled)) + geom_boxplot()
我有几个测量值,尽管比例完全不同,但它们需要在同一个箱线图中显示。每个组(=测量类型)都有自己特定的高和低可接受限度。
数据应在 R 中标准化,以便所有组的下限始终为 -1,上限始终为 +1。然后我将设置 Y 轴,以便正确显示所有测量值。
到目前为止,我已经设法绘制了 min(NUM_VALUE) 为 -1 和 max(NUM_VALUE) 为 +1 的箱线图,但这不是我想要的最终结果。
假数据(只是table的一部分):
ITEMID NAME SERIALID NUM_VALUE LOWER_LIMIT UPPER_LIMIT
Itemcode1 group1 SN1000 62.1 50 80
Itemcode1 group1 SN1001 62.6 50 80
Itemcode1 group1 SN1002 63.9 50 80
Itemcode1 group2 SN1006 1526.79 1526 1528
Itemcode1 group2 SN1007 1526.799 1526 1528
Itemcode1 group3 SN1015 1815.09 1814 1816
Itemcode1 group3 SN1016 1815.094 1814 1816
Itemcode1 group3 SN1017 1815.098 1814 1816
Itemcode1 group4 SN1025 1526.751 1526 1527
Itemcode1 group4 SN1026 1526.62 1526 1527
Itemcode1 group5 SN1028 1816.155 1816 1817
Itemcode1 group5 SN1029 1816.245 1816 1817
R代码:
library(ggplot2)
library(data.table)
df <- read.table("data3.csv", header=TRUE, sep=";", stringsAsFactors=FALSE)
skl <- function(x){(x-min(x))/(max(x)-min(x))*2-1}
df <- transform(df,scaled=ave(df$NUM_VALUE,df$NAME,FUN=skl))
ggplot(df, aes(x=df$NAME, y = df$scaled)) + geom_boxplot()
到目前为止的图表: boxplot
我是 R 的新手。
问题:如何根据 UPPER_LIMIT 和 LOWER_LIMIT 按组缩放箱线图并将其全部显示在同一张图中?
非常感谢任何帮助,谢谢!
除了使用 min()
和 max()
,您还可以将函数 skl()
更改为也使用 lower
和 upper
边界。
适配函数如下所示:
skl <- function(x, lower, upper){
(x - lower)/(upper - lower) * 2 - 1
}
您可以使用 apply()
遍历 data.frame
的行:
df$scaled <- apply(df[, 4:6], 1, function(row) {
skl(x = row[1], lower = row[2], upper = row[3])
})
结果如下所示:
df$scaled
[1] -0.19333333 -0.16000000 -0.07333333 -0.21000000 -0.20100000 0.09000000 0.09400000 0.09800000
[9] 0.50200000 0.24000000 -0.69000000 -0.51000000
使用您的代码,箱线图将如下所示:
library(ggplot2)
ggplot(df, aes(x=df$NAME, y = df$scaled)) + geom_boxplot()