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

时间:2017-11-16 22:35:49

标签: 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

创建雷达图

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

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

enter image description here

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

4 个答案:

答案 0 :(得分:3)

可能是您的问题的解决方法: 如果您在运行雷达图之前转换数据 (例如对数,平方根......)然后你也可以看到小值。

答案 1 :(得分:3)

如果你想确保看到所有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)

plot

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

  • jv具有相同的数量级
  • n大约5^2 = 25小于j 5 i基数的值^2因为{{ 1}}段)
  • 2大约v = 5^2次(再次)小于25

如果我们查看黑色系列,我们会发现n比其他尺寸大约z倍。

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

答案 2 :(得分:1)

这是一个使用立方根变换的例子:

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)`

,结果如下: radarchart example

编辑:
如果您想要更大的缩放值,您可以使用更高的根顺序进行缩放 例如

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)

root_transformation_5

您可以通过更改t的值来根据需要调整“缩放” 所以你应该找到一个适合你的可视化。

答案 3 :(得分:0)

以下是使用第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)`

,结果如下: enter image description here

您可以尝试第n个根找到最适合您的那个。 N增长,附近零数字的根增长得更快。