在R中为数据框中的每一行绘制雷达图。

3
我想为一个有10行16列的数据框绘制多个雷达图。特别是,我想为数据框的每一行绘制一个雷达图,其中列对应于各个变量。我使用了 fmsb 包中的 radarchart 函数,但我只能将整个行绘制在一个图表中,而无法将其分成不同的图表。
是否有这样的选项可以实现分割成多个图表呢?
数据框叫做 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) 我将获得一个图表,其中每行都有一条线。

2
如果您需要帮助,请在您的问题中包含一个可重现的示例。 - Señor O
使用数据子集创建每个图,并将它们组合在一起。请参阅Quick-R教程:组合绘图。此外,请阅读这篇文章 - Barranka
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]))
})

And that results in the following plot

radar chart


@user2871063:指定布局的另一种方法是使用par函数的mfrow(或mfcol)参数。您可以使用n2mfrow自动计算布局,例如:par(mfrow=n2mfrow(nrow(dd)), mar=rep(2, 4))。(这将替换对layout的调用。) - jbaums

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接