R radarchart:自由轴增强记录显示?

may*_*cca 5 r radar-chart

我正在尝试使用显示我的数据radarchart {fmsb}.我的记录值变化很大.因此,在最终图中看不到低值.

是否每个记录都有"自由"轴,以便独立于其比例显示数据?

虚拟的例子:

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
Run Code Online (Sandbox Code Playgroud)

创建雷达图

require(fmsb)
radarchart(df, axistype=0, pty=32, axislabcol="grey",# na.itp=FALSE,
           seg = 5, centerzero = T)
Run Code Online (Sandbox Code Playgroud)

结果:(只有行#2和#3可见,低值的行#1不可见!!)

在此输入图像描述

如何使所有记录(行)可见,即如何为我的任何记录"释放"轴?非常感谢,

Moo*_*per 5

如果您想确保看到所有 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))
  )
Run Code Online (Sandbox Code Playgroud)

在这里,我们有一个基地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)
Run Code Online (Sandbox Code Playgroud)

阴谋

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

  • j并且v具有相同的数量级
  • n大约5^2=25j( 5i 是基数的值,^2因为2段) 小
  • v大约5^2=25倍(再次)小于z

如果我们查看黑色系列,我们会看到 n 大约3.5^5是其他维度的两倍。

如果我们查看红色系列,我们会发现所有维度的数量级都是相同的。