我想为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)
我获得了一个图表,每行都有一行。
答案 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]))
})
这导致以下情节