在 ggradar 中更改轴标题文本颜色

Change axis title text color in ggradar

我希望雷达图周围的图块(例如 mpgcyldisp 等)为不同的颜色。有没有办法在 ggradar 中做到这一点?我曾尝试使用 theme() 参数来执行此操作,但似乎没有用。 ggradar 中有一个参数要更改字体而不是颜色。

mtcars %>%
  add_rownames( var = "group" ) %>%
  mutate_each(funs(rescale), -group) %>%
  tail(4) %>% select(1:10) %>% 
  ggradar() + 
  theme(
    axis.title = element_text(color = 'red')
  )

查看 ggradar() 的文档和源代码后,恐怕没有设置“轴”文本颜色的选项。实际上,轴文本是通过多个 geom_text 层添加的,这就是 theme 选项不起作用的原因。

一个选项是通过首先识别“文本”层(有一堆(文本)层)然后手动设置文本颜色来操纵 ggplot 对象:

library(ggradar)
library(ggplot2)
library(dplyr)

p <- mtcars %>%
  tibble::rownames_to_column(var = "group") %>%
  mutate(across(-group, scales::rescale)) %>%
  tail(4) %>% 
  select(1:10) %>% 
  ggradar()

# Text layers
is_text <- sapply(p$layers, function(x) inherits(x$geom, "GeomText") && any(x$data$text %in% names(mtcars)))

p$layers[is_text] <- lapply(p$layers[is_text], function(x) { x$aes_params$colour <- "red"; x})

p

ggradar 中的圆周轴标签不是“真正的”轴标签。它们被绘制为 geom_text 层,这就是为什么当应用不同的 theme 元素时它们不会改变的原因..

我没有看到直接更改它们的选项,但可以像这样为适当的图层美学提供颜色:

p <- mtcars %>%
  rownames_to_column( var = "group" ) %>%
  mutate(across(where(is.numeric), scales::rescale)) %>%
  tail(4) %>% 
  select(1:10) %>% 
  ggradar() 

p$layers[[1]]$aes_params <- c(p$layers[[1]]$aes_params, colour = "red")
p$layers[[5]]$aes_params <- c(p$layers[[5]]$aes_params, colour = "red")
p$layers[[6]]$aes_params <- c(p$layers[[6]]$aes_params, colour = "red")

p