我正在尝试使用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行!!)
如何使所有记录(行)可见,即如何“释放”我的任何记录的轴?非常感谢,
最佳答案
如果您希望确保看到所有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
是基数的值,^2
是2
分段的值)v
大约等于5^2
= 25
倍(再次)比z
如果我们看一下黑色系列,我们会看到n大约比其他维度大
3.5^5
倍。如果我们看红色系列,我们会发现所有维度之间的数量级是相同的。
关于R雷达图: free axis to enhance records display?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47340268/