如何修改R语言radarchart雷达图的背景颜色?
如何修改radarchart生成的雷达图背景颜色?
问题描述
我想要修改radarchart生成的雷达图的背景颜色,但未找到对应的设置参数,尝试用ggplot2的theme()方法失败(返回NULL),请求帮助。
数据与现有代码
数据结构
structure(list(Acceptance = c(16, 4, 13), `Committed Action` = c(16, 4, 11), Diffusion = c(16, 4, 7), `Present Moment` = c(16, 4, 10), `Self as Context` = c(16, 4, 11), Values = c(16, 4, 12)), row.names = c(NA, -3L), class = c("tbl_df", "tbl", "data.frame"))
数据预览:
| Acceptance | Committed Action | Diffusion | Present Moment | Self as Context | Values |
|---|---|---|---|---|---|
| 16 | 16 | 16 | 16 | 16 | 16 |
| 4 | 4 | 4 | 4 | 4 | 4 |
| 13 | 11 | 7 | 10 | 11 | 12 |
现有绘图代码
library(fmsb) radarchart(df, axistype=1, # 自定义多边形 pcol="darkblue", pfcol=rgb(0.2,0.5,0.5,0.5), plwd=3, # 自定义网格 cglcol="grey50", cglty=1, axislabcol="black", caxislabels=seq(4,16,length.out = 5), cglwd=2, # 自定义标签 vlcex=1.8, calcex=1.8)
失败的尝试
g <- radarchart(df, axistype=1, pcol="darkblue", pfcol=rgb(0.2,0.5,0.5,0.5), plwd=3, cglcol="grey50", cglty=1, axislabcol="black", caxislabels=seq(4,16,length.out = 5), cglwd=2, vlcex=1.8, calcex=1.8) g + theme(panel.background = element_rect(fill = "lightgray")) # 输出:NULL
解决方案
原因说明
radarchart是fmsb包中基于base R绘图系统的函数,不会返回ggplot对象,因此无法使用ggplot2的theme()方法修改背景。需要用base R的绘图技巧或改用ggplot生态的工具。
方法1:用base R绘制背景矩形
在调用radarchart之前,先创建空白绘图区域,并用rect()绘制背景色,再让雷达图叠加在上面:
library(fmsb) # 创建空白绘图区域,设置x/y范围覆盖雷达图区域 plot(0, 0, type="n", xlim=c(-1.2, 1.2), ylim=c(-1.2, 1.2), axes=FALSE, xlab="", ylab="") # 绘制背景矩形,颜色可自定义 rect(-1.2, -1.2, 1.2, 1.2, col="lightgray", border=NA) # 绘制雷达图,设置bg参数让底层背景透明 radarchart(df, axistype=1, pcol="darkblue", pfcol=rgb(0.2,0.5,0.5,0.5), plwd=3, cglcol="grey50", cglty=1, axislabcol="black", caxislabels=seq(4,16,length.out = 5), cglwd=2, vlcex=1.8, calcex=1.8, bg="transparent")
方法2:改用ggplot2生态绘制雷达图
如果更习惯ggplot2语法,可使用ggradar包生成雷达图,轻松用theme()修改背景:
# 安装并加载依赖包 install.packages("ggradar") library(ggradar) library(dplyr) # 转换数据格式(适配ggradar要求) df_plot <- df %>% mutate(group = c("Max", "Min", "Target")) %>% select(group, everything()) # 绘制雷达图并设置背景 ggradar(df_plot, grid.line.width = 2, grid.line.color = "grey50", axis.label.size = 1.8, grid.label.size = 1.8, group.line.width = 3, group.point.size = 3, group.colours = c("transparent", "transparent", "darkblue"), group.fill.colours = c("transparent", "transparent", rgb(0.2,0.5,0.5,0.5))) + theme(panel.background = element_rect(fill = "lightgray", color=NA), plot.background = element_rect(fill = "lightgray", color=NA))
来源说明
内容的提问来源于stack exchange,提问作者Pss
相关产品推荐
相关产品推荐

