R radarchart:自由轴增强记录显示?
R radarchart: free axis to enhance records display?
我正在尝试使用 radarchart {fmsb}
显示我的数据。我的记录的价值变化很大。因此,低值在最终图中是不可见的。
每条记录是否有 "free" 轴,以独立于其比例可视化数据?
虚拟示例:
df<-data.frame(n = c(100, 0,0.3,60,0.3),
j = c(100,0, 0.001, 70,7),
v = c(100,0, 0.001, 79, 3),
z = c(100,0, 0.001, 80, 99))
n j v z
1 100.0 100.0 100.000 100.000 # max
2 0.0 0.0 0.000 0.000 # min
3 0.3 0.001 0.001 0.001 # small values -> no visible on final chart!!
4 60.0 0.001 79.000 80.000
5 0.3 0.0 3.000 99.000
创建雷达图
require(fmsb)
radarchart(df, axistype=0, pty=32, axislabcol="grey",# na.itp=FALSE,
seg = 5, centerzero = T)
结果:(只有第 2 行和第 3 行可见,值较低的第 1 行不可见!!)
如何使所有记录(行)可见,即如何 "free" 我的任何记录的轴?非常感谢,
也许可以解决您的问题:
如果您要在 运行 radarchart 之前转换数据
(例如对数、平方根..)那么您还可以可视化小值。
这里是一个使用立方根变换的例子:
library(specmine)
df.c<-data.frame(cubic_root_transform(df)) # transform dataset
radarchart(df.c, axistype=0, pty=32, axislabcol="grey",# na.itp=FALSE,
seg = 5, centerzero = T)`
结果将如下所示:
编辑:
如果您想进一步缩放小值,可以使用更高阶的根来实现。
例如
t<-5 # for fifth order root
df.t <- data.frame(apply(df, 2, function(x) FUN=x^(1/t))) # transform dataset
radarchart(df.t, axistype=0, pty=32, axislabcol="grey",# na.itp=FALSE,
seg = 5, centerzero = T)
您可以通过更改 t 的值来根据需要调整 "zoom"
所以你应该找到适合你的可视化。
如果您想确保看到所有 4 个维度,无论有何差异,您将需要一个对数刻度。
由于雷达图的设计,我们不能有负值,我们在选择基数时受到值范围和段数(轴刻度)的限制。
如果我们想要一个整数基数,我们可以选择的最小值是:
seg0 <- 5 # your initial choice, could be changed
base <- ceiling(
max(apply(df[-c(1,2),],MARGIN = 1,max) / apply(df[-c(1,2),],MARGIN = 1,min))
^(1/(seg0-1))
)
这里我们有一个基础5
。
让我们对数据进行规范化和转换。
首先我们通过将所有系列的最大值设置为 1 来规范化数据,然后我们应用对数变换,将每个系列的最大值设置为 seg0(n
黑色,z
对于其他人)和 1 到 2 之间的所有系列中的最小值(这里是黑色系列的 v
值)。
df_normalized <- as.data.frame(df[-c(1,2),]/apply(df[-c(1,2),],MARGIN = 1,max))
df_transformed <- rbind(rep(seg0,4),rep(0,4),log(df_normalized,base) + seg0)
radarchart(df_transformed, axistype=0, pty=32, axislabcol="grey",# na.itp=FALSE,
seg = seg0, centerzero = T,maxmin=T)
如果我们看一下绿色系列,我们会看到:
j
和v
数量级相同
n
大约比 j
小 5^2
= 25
倍(5
是底数,^2
因为2
段)
v
大约比 z
小 5^2
= 25
倍(再次)
如果我们观察黑色系列,我们会发现 n 大约是其他维度的 3.5^5
倍。
如果我们查看红色系列,我们会发现所有维度的数量级都相同。
下面是一个使用 10 次根变换的例子:
library(specmine)
df.c<-data.frame((df)^(1/10)) # transform dataset
radarchart(df.c, axistype=0, pty=32, axislabcol="grey",# na.itp=FALSE,
seg = 5, centerzero = T)`
结果将如下所示:
您可以尝试 n 次方根来找到最适合您的。 N 增长,零附近数的根增长得更快。
我正在尝试使用 radarchart {fmsb}
显示我的数据。我的记录的价值变化很大。因此,低值在最终图中是不可见的。
每条记录是否有 "free" 轴,以独立于其比例可视化数据?
虚拟示例:
df<-data.frame(n = c(100, 0,0.3,60,0.3),
j = c(100,0, 0.001, 70,7),
v = c(100,0, 0.001, 79, 3),
z = c(100,0, 0.001, 80, 99))
n j v z
1 100.0 100.0 100.000 100.000 # max
2 0.0 0.0 0.000 0.000 # min
3 0.3 0.001 0.001 0.001 # small values -> no visible on final chart!!
4 60.0 0.001 79.000 80.000
5 0.3 0.0 3.000 99.000
创建雷达图
require(fmsb)
radarchart(df, axistype=0, pty=32, axislabcol="grey",# na.itp=FALSE,
seg = 5, centerzero = T)
结果:(只有第 2 行和第 3 行可见,值较低的第 1 行不可见!!)
如何使所有记录(行)可见,即如何 "free" 我的任何记录的轴?非常感谢,
也许可以解决您的问题: 如果您要在 运行 radarchart 之前转换数据 (例如对数、平方根..)那么您还可以可视化小值。
这里是一个使用立方根变换的例子:
library(specmine)
df.c<-data.frame(cubic_root_transform(df)) # transform dataset
radarchart(df.c, axistype=0, pty=32, axislabcol="grey",# na.itp=FALSE,
seg = 5, centerzero = T)`
结果将如下所示:
编辑:
如果您想进一步缩放小值,可以使用更高阶的根来实现。
例如
t<-5 # for fifth order root
df.t <- data.frame(apply(df, 2, function(x) FUN=x^(1/t))) # transform dataset
radarchart(df.t, axistype=0, pty=32, axislabcol="grey",# na.itp=FALSE,
seg = 5, centerzero = T)
您可以通过更改 t 的值来根据需要调整 "zoom" 所以你应该找到适合你的可视化。
如果您想确保看到所有 4 个维度,无论有何差异,您将需要一个对数刻度。
由于雷达图的设计,我们不能有负值,我们在选择基数时受到值范围和段数(轴刻度)的限制。
如果我们想要一个整数基数,我们可以选择的最小值是:
seg0 <- 5 # your initial choice, could be changed
base <- ceiling(
max(apply(df[-c(1,2),],MARGIN = 1,max) / apply(df[-c(1,2),],MARGIN = 1,min))
^(1/(seg0-1))
)
这里我们有一个基础5
。
让我们对数据进行规范化和转换。
首先我们通过将所有系列的最大值设置为 1 来规范化数据,然后我们应用对数变换,将每个系列的最大值设置为 seg0(n
黑色,z
对于其他人)和 1 到 2 之间的所有系列中的最小值(这里是黑色系列的 v
值)。
df_normalized <- as.data.frame(df[-c(1,2),]/apply(df[-c(1,2),],MARGIN = 1,max))
df_transformed <- rbind(rep(seg0,4),rep(0,4),log(df_normalized,base) + seg0)
radarchart(df_transformed, axistype=0, pty=32, axislabcol="grey",# na.itp=FALSE,
seg = seg0, centerzero = T,maxmin=T)
如果我们看一下绿色系列,我们会看到:
j
和v
数量级相同n
大约比j
小5^2
=25
倍(5
是底数,^2
因为2
段)v
大约比z
小
5^2
= 25
倍(再次)
如果我们观察黑色系列,我们会发现 n 大约是其他维度的 3.5^5
倍。
如果我们查看红色系列,我们会发现所有维度的数量级都相同。
下面是一个使用 10 次根变换的例子:
library(specmine)
df.c<-data.frame((df)^(1/10)) # transform dataset
radarchart(df.c, axistype=0, pty=32, axislabcol="grey",# na.itp=FALSE,
seg = 5, centerzero = T)`
结果将如下所示:
您可以尝试 n 次方根来找到最适合您的。 N 增长,零附近数的根增长得更快。