gpt4 book ai didi

R 雷达图 : free axis to enhance records display?

转载 作者:行者123 更新时间:2023-12-04 17:43:36 25 4
gpt4 key购买 nike

我正在尝试使用 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 个维度,无论差异如何,您都需要一个对数刻度。

由于雷达图的设计,我们不能有负值,我们在选择基数时受到值范围和段数(轴刻度)的限制。

如果我们想要一个整数基数,我们可以选择的最小值是:

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 因为 2 段)
  • v是关于5^2 = 25倍(再次)小于 z

  • 如果我们查看黑色系列,我们会看到 n 约为 3.5^5比其他维度大几倍。

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

    关于R 雷达图 : free axis to enhance records display?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47340268/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com