我正在尝试使用显示我的数据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不可见!!)
如何使所有记录(行)可见,即如何为我的任何记录"释放"轴?非常感谢,
如果您想确保看到所有 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=25比j( 5i 是基数的值,^2因为2段) 小v大约5^2=25倍(再次)小于z如果我们查看黑色系列,我们会看到 n 大约3.5^5是其他维度的两倍。
如果我们查看红色系列,我们会发现所有维度的数量级都是相同的。
| 归档时间: |
|
| 查看次数: |
475 次 |
| 最近记录: |