Регулировка меток осей на радаркарте (fmsb)

Я потратил довольно много времени на настройку этого радарплота, который будет использоваться примерно в 200 автоматически генерируемых отчетах. Единственная проблема, которую я не могу решить, это то, что метки оси перекрываются с метками оси. В прилагаемом примере проблема присутствует в левой части графика.

Есть ли способ, которым я могу решить, где эти метки оси размещены? Или, может быть, расположите их под углом, как вы можете в ggplot?

Я хотел бы продолжать использовать fmsb, если это возможно, так как мне действительно нравится внешний вид этих графиков.

Я поместил код ниже, который должен дать вам этот результат. Изображение сохраняется как.png из R в размере: w=1000 h=813

segmat <- 7
colors_border=c("#ee7f00", "#00aba4")
colors_in=c("#f6bf8099", "#73d1cd99")
legend <- factor(c("Skole", "Land"))
library(likert)
library(fmsb)

            datmat <- structure(list(`Data, Anvendelse` = c(80, 45, 76.9365245227314, 
            67.0674586834251), `Data, Viden` = c(80, 45, 73.8095238095238, 
            60.2180860386088), `Data, Ræsonnement` = c(80, 45, 65.6218434343434, 
            60.9232595763823), `Geometri, Anvendelse` = c(80, 45, 65.4590909090909, 
            52.8446335193598), `Geometri, Viden` = c(80, 45, 63.1238336316461, 
            55.0262048394226), `Geometri, Ræsonnement` = c(80, 45, 66.9981060606061, 
            50.2430105282051), `Tal, Anvendelse` = c(80, 45, 65.9269917792645, 
            53.701961851033), `Tal, Viden` = c(80, 45, 70.8290320790321, 
            65.5516016811992), `Tal, Ræsonnement` = c(80, 45, 57.5584072012643, 
            47.5568952748004)), row.names = c("1", "2", "Skole", "Land"), class = "data.frame")

        radarchart(datmat, axistype = 2,
                   pcol=colors_border , pfcol=colors_in, plwd=3 , plty=1, seg=segmat,
    vlcex=1.1, palcex=1.1,
                   mtext("Procentdel rigtige besvarelser for fagområder. Hver linje angiver en forskel på 5%", col = "darkgrey", font = 4, cex = 1.2),
                   axislabcol="black") 
        legend(1.0,-0.8,legend = reverse.levels(legend),
               col=colors_border,cex=0.8,
               pch = 16, lty =1 , lwd = 3) 
        title(main = list("Matematik", cex = 1.6, font = 4))

1 ответ

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

Вот обезьяний патч, который быстро исправляет это в текущей версии.fmsb.

      patch_fmsb <- function() {
   fmsb.env <- environment(fmsb::radarchart)
   code <- deparse(fmsb.env$radarchart)
    
   # Axis label nudge
   code[60] <- "            text(xx[1:n] * r_nudge_caxislabels,  yy[1:n] * r_nudge_caxislabels, PAXISLABELS, col = axislabcol)"
   code[61] <- "        else text(xx[1:n] * r_nudge_caxislabels, yy[1:n] * r_nudge_caxislabels, PAXISLABELS, col = axislabcol, "
   
   # Variable label nudge
   code[68] <- "        text(xx * 1.2 * r_nudge_vlabels, yy * 1.2 * r_nudge_vlabels, VLABELS)"
   code[69] <- "    else text(xx * 1.2 * r_nudge_vlabels, yy * 1.2 * r_nudge_vlabels, VLABELS, cex = vlcex)"
   
   # Include parameters in function call
   code <- append(code, "    r_nudge_caxislabels = 1, r_nudge_vlabels = 1,", after = 5)
   
   rlang::env_binding_unlock(env = fmsb.env)
   fmsb.env$radarchart = eval(parse(text = code))
   rlang::env_binding_lock(env = fmsb.env)
}

И как им пользоваться, для вашего примера:

      segmat <- 7
colors_border=c("#ee7f00", "#00aba4")
colors_in=c("#f6bf8099", "#73d1cd99")
legend <- factor(c("Skole", "Land"))

library(likert)
library(fmsb)

datmat <- structure(list(
   `Data, Anvendelse` = c(80, 45, 76.9365245227314, 67.0674586834251), 
   `Data, Viden` = c(80, 45, 73.8095238095238, 60.2180860386088), 
   `Data, Ræsonnement` = c(80, 45, 65.6218434343434, 60.9232595763823), 
   `Geometri, Anvendelse` = c(80, 45, 65.4590909090909, 52.8446335193598), 
   `Geometri, Viden` = c(80, 45, 63.1238336316461, 55.0262048394226), 
   `Geometri, Ræsonnement` = c(80, 45, 66.9981060606061, 50.2430105282051), 
   `Tal, Anvendelse` = c(80, 45, 65.9269917792645, 53.701961851033), 
   `Tal, Viden` = c(80, 45, 70.8290320790321, 65.5516016811992), 
   `Tal, Ræsonnement` = c(80, 45, 57.5584072012643, 47.5568952748004)), 
   row.names = c("1", "2", "Skole", "Land"), class = "data.frame")

patch_fmsb()

radarchart(datmat, axistype = 2,
           pcol=colors_border , pfcol=colors_in, plwd=3 , plty=1, seg=segmat,
           vlcex=1.1, palcex=1.1,
           mtext("Procentdel rigtige besvarelser for fagområder. Hver linje angiver en forskel på 5%", col = "darkgrey", font = 4, cex = 1.2),
           axislabcol="black",
           r_nudge_caxislabels = 1.05,
           r_nudge_vlabels = 1.05) 
legend(1.0,-0.8,legend = reverse.levels(legend),
       col=colors_border,cex=0.8,
       pch = 16, lty =1 , lwd = 3) 
title(main = list("Matematik", cex = 1.6, font = 4))

Другие вопросы по тегам