我正在尝试使用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不可见!!)
如何使所有记录(行)可见,即如何为我的任何记录“释放”轴?非常感谢你,
答案 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)
如果我们看一下绿色系列,我们会看到:
j
和v
具有相同的数量级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)`
编辑:
如果您想要更大的缩放值,您可以使用更高的根顺序进行缩放
例如
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的值来根据需要调整“缩放” 所以你应该找到一个适合你的可视化。
答案 3 :(得分:0)