Постройте радарную диаграмму для каждой строки во фрейме данных с помощью R

Я хотел бы построить несколько радарных диаграмм для фрейма данных с 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), я получу одну диаграмму с линией для каждой строки.


person user2871063    schedule 16.06.2014    source источник
comment
Вы должны включить воспроизводимый пример в свой вопрос, если вам нужна помощь.   -  person Señor O    schedule 16.06.2014
comment
Создайте каждый график с подмножеством ваших данных и объедините их. Ознакомьтесь с руководством Quick-R: Объединение графиков. Также прочтите эту статью.   -  person Barranka    schedule 16.06.2014


Ответы (1)


В основном вы хотите вызывать функцию один раз для каждой строки. Используйте что-то вроде 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]))
})

И это приводит к следующему сюжету

радарная диаграмма

person MrFlick    schedule 16.06.2014
comment
@user2871063 user2871063: другой способ указать макет — использовать аргумент mfrow (или mfcol) для par. Вы можете автоматически рассчитать макет с помощью n2mfrow, например: par(mfrow=n2mfrow(nrow(dd)), mar=rep(2, 4)). (Это заменит вызов layout.) - person jbaums; 17.06.2014