如何在fmsb雷达图中添加无填充的黑色零轴线?
批量绘制雷达图添加零轴线解决方案
问题描述
因需批量绘制雷达图,编写了createRadarChart函数,现需在雷达图中添加黑色无填充的零轴线,尝试添加零向量但未成功,附使用fmsb包的相关代码:
原代码
library(fmsb) colors = # 颜色列表 finalColors <- colors[1:numberofloops] createRadarChart <- function(data, color = "#00AFBB", vlabels = colnames(data), vlcex = 0.7, caxislabels = NULL, title = NULL, ...){ radarchart( data, axistype = 1, pcol = color, pfcol = scales::alpha(color, 0.75), plwd = 2, plty = 1, cglcol = "grey", cglty = 1, cglwd = 0.75, axislabcol = FALSE, vlcex = vlcex, vlabels = vlabels, caxislabels = caxislabels, title = title, pty = 32, ... ) } for(i in 1:numberofloops){ png(filename=paste(i,"png) createRadarChart( data = data[c(1, 2, i+2), ], # 第1、2行是最小值和最大值 color = finalColors[i], title = titles[i,] ) dev.off() }
解决方案
要添加黑色无填充的零轴线,需在主雷达图绘制完成后,叠加绘制一条全零的雷达线,具体操作如下:
- 提前准备全零数据行:在原数据框中新增一行全零记录,确保零轴线有对应的数值基础。假设原数据前两行是最小值和最大值,新增行放在第3位:
# 给数据添加全零行 data <- rbind(data[1:2, ], rep(0, ncol(data)), data[3:nrow(data), ])
- 修改绘制函数:在
createRadarChart函数中,先绘制主雷达图,再调用一次radarchart叠加零轴线,设置黑色线条、无填充的参数:
library(fmsb) library(scales) colors = # 颜色列表 finalColors <- colors[1:numberofloops] createRadarChart <- function(data, color = "#00AFBB", vlabels = colnames(data), vlcex = 0.7, caxislabels = NULL, title = NULL, ...){ # 绘制主雷达图 radarchart( data, axistype = 1, pcol = color, pfcol = scales::alpha(color, 0.75), plwd = 2, plty = 1, cglcol = "grey", cglty = 1, cglwd = 0.75, axislabcol = FALSE, vlcex = vlcex, vlabels = vlabels, caxislabels = caxislabels, title = title, pty = 32, ... ) # 叠加绘制零轴线 radarchart( data[c(1,2,3), ], # 保留min、max维持坐标轴范围 pcol = "black", pfcol = NA, # 黑色线条+无填充 plwd = 1.5, plty = 1, cglcol = NA, cglty = 0, # 关闭重复网格线 axislabcol = FALSE, vlabels = NA, # 关闭重复标签 add = TRUE # 关键:在已有图上叠加 ) } # 修正循环中的文件名语法错误,批量生成图片 for(i in 1:numberofloops){ png(filename = paste0(i, ".png")) createRadarChart( data = data[c(1, 2, 3, i+3), ], # 包含min、max、全零行、当前数据行 color = finalColors[i], title = titles[i,] ) dev.off() }
关键参数说明
add = TRUE:实现零轴线在主图上叠加绘制,避免覆盖原有内容pfcol = NA:设置零轴线无填充,只显示线条cglcol = NA、vlabels = NA:关闭零轴线绘制时的网格线和标签,避免重复元素干扰主图
内容的提问来源于stack exchange,提问作者lapiordwsnd
相关产品推荐
相关产品推荐

