3

我想为具有 10 行和 16 列的数据框绘制多个雷达图。特别是我想为数据帧的每一行绘制一个雷达图,其中的列对应于变量。我使用了包中的函数radarchartfmsb但我只能在图表中绘制整行,而不能将其拆分为不同的图表。

有没有办法做到这一点?

数据框被调用normed,它看起来如下(值已标准化):

 (clust) (v1) (v2) (v3) (v4) (v5) (v6) ...
       1 0.00 0.10 0.12 0.23 0.33 1.00
       2 0.13 0.80 0.84 0.70 0.60 0.77
       3 0.25 0.63 1.00 1.00 0.10 1.00
       4 0.38 1.00 0.54 0.67 0.90 0.59

如果我简单地编码: radarchart(normed) 我得到一个图表,每行都有一条线。

4

1 回答 1

9

基本上你想为每一行调用一次函数。使用类似的东西layout()为每个设备绘制多个图。另请注意,radarchart需要一种方法来了解每个轴的范围。默认情况下,它通过查看每个变量的前两行来找到最大值和最小值。这是一个完整的例子

#test data
dd<-data.frame(
    clust = 1:4, 
    v1 = c(0, 0.13, 0.25, 0.38), 
    v2 = c(0.1, 0.8, 0.63, 1), 
    v3 = c(0.12, 0.84, 1, 0.54), 
    v4 = c(0.23, 0.7, 1, 0.67), 
    v5 = c(0.33, 0.6, 0.1, 0.9), 
    v6 = c(1, 0.77, 1, 0.59)
)

现在我们画图

par(mar=c(1, 2, 2, 1)) #decrease default margin
layout(matrix(1:4, ncol=2)) #draw 4 plots to device
#loop over rows to draw them, add 1 as max and 0 as min for each var
lapply(1:4, function(i) { 
    radarchart(rbind(rep(1,6), rep(0,6), dd[i,-1]))
})

这导致了以下情节

雷达图

于 2014-06-16T17:48:49.110 回答