Прокрутите список фреймов данных и назовите заголовок для каждого графика.

Я ссылаюсь на этот пример кода для создания графика, который содержит несколько подзаголовков с их собственными заголовками, но не может правильно пометить заголовки подзаголовков циклом. Для простоты изложения я использую в качестве примера среду графиков 1 на 2.

par(mfrow(1, 2))
require(fmsb)

data1=as.data.frame(matrix( sample(2:20, 10, replace=T) , ncol=10))
data2=as.data.frame(matrix( sample(2:20, 10, replace=T) , ncol=10))
colnames(data1)=c("math" , "english" , "biology" , "music" , "R-coding", "data-viz" , "french" , "physic", "statistic", "sport" )
colnames(data2)=c("math" , "english" , "biology" , "music" , "R-coding", "data-viz" , "french" , "physic", "statistic", "sport" )

df1=rbind(rep(20,10) , rep(0,10) , data1)
df2=rbind(rep(20,10) , rep(0,10) , data2)

my.list <- list(df1, df2)

for (i in my.list[[i]]) {

radarchart(i, axistype=1 , 

    #custom polygon
    pcol=rgb(0.2,0.5,0.5,0.9) , pfcol=rgb(0.2,0.5,0.5,0.5) , plwd=4 , 

    #custom the grid
    cglcol="grey", cglty=1, axislabcol="grey", caxislabels=seq(0,20,5), cglwd=0.8,

    #custom labels
    vlcex=0.8 
    )
}

Однако этот блок кода ничего не вернул, поскольку он требует, чтобы ввод был фреймом данных. Кроме того, если я хочу поместить аргумент title в radarchart(), назначив каждому кадру данных уникальное имя (скажем, студент 1, студент 2) и используя их в качестве заголовков для каждого подзаголовка, как я могу добиться этого в цикле?


person Chris T.    schedule 08.07.2019    source источник


Ответы (1)


В вашем коде были некоторые ошибки, вот ожидаемый результат:

par(mfrow=c(1, 2)) #debugged

library(fmsb)

data1=as.data.frame(matrix( sample(2:20, 10, replace=T) , ncol=10))
data2=as.data.frame(matrix( sample(2:20, 10, replace=T) , ncol=10))
colnames(data1)=c("math" , "english" , "biology" , "music" , "R-coding", "data-viz" , "french" , "physic", "statistic", "sport" )
colnames(data2)=c("math" , "english" , "biology" , "music" , "R-coding", "data-viz" , "french" , "physic", "statistic", "sport" )

df1=rbind(rep(20,10) , rep(0,10) , data1)
df2=rbind(rep(20,10) , rep(0,10) , data2)

my.list <- list("df1" = df1, "df2" = df2) #name the list's elements

for (i in 1:length(my.list)) { #use i as list indexer, not to call the elements

  radarchart(my.list[[i]], axistype=1 , #call the list's elements

             #custom polygon
             pcol=rgb(0.2,0.5,0.5,0.9) , pfcol=rgb(0.2,0.5,0.5,0.5) , plwd=4 , 

             #custom the grid
             cglcol="grey", cglty=1, axislabcol="grey", caxislabels=seq(0,20,5), cglwd=0.8,

             #custom labels
             vlcex=0.8, 

             #title; calling the list's names
             title = names(my.list)[i] 
  )
}

введите здесь описание изображения

person Dij    schedule 08.07.2019
comment
Вау, это очень аккуратно, спасибо большое! Можно ли как-то уменьшить расстояние по вертикали между заголовком подзаголовка и самим подзаголовком? - person Chris T.; 08.07.2019
comment
@Христос. В очень длинном файле справки ?par есть ответ. - person lmo; 09.07.2019
comment
@Христос. добро пожаловать! Одним из решений является удаление аргумента title = ... из radarchart и вместо этого обработка заголовка с помощью вызова title(names(my.list)[i], line = -1), все еще внутри цикла (но вне radarchart()). - person Dij; 09.07.2019
comment
Спасибо @lmo и @Dij, я попытался настроить par(mfrow(row, col)), добавляя и вычитая некоторое число от 0 до 1, но это регулирует только положение самого графика, а не относительное расстояние между заголовком и подграфом. Рекомендуемый Диджем подход работает лучше всего. - person Chris T.; 09.07.2019