You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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()
}

解决方案

要添加黑色无填充的零轴线,需在主雷达图绘制完成后,叠加绘制一条全零的雷达线,具体操作如下:

  1. 提前准备全零数据行:在原数据框中新增一行全零记录,确保零轴线有对应的数值基础。假设原数据前两行是最小值和最大值,新增行放在第3位:
# 给数据添加全零行
data <- rbind(data[1:2, ], rep(0, ncol(data)), data[3:nrow(data), ])
  1. 修改绘制函数:在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 18:31:02