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)

如果我们看一下绿色系列,我们会看到:

  • jv数量级相同
  • n 大约比 j5^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 增长,零附近数的根增长得更快。