用R绘制数据帧中每行的雷达图

时间:2014-06-16 16:23:00

标签: r plot radar-chart

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

有选择吗?

数据框称为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) 我获得了一个图表,每行都有一行。

1 个答案:

答案 0 :(得分:7)

基本上你想为每一行调用一次函数。使用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]))
})

这导致以下情节

radar chart