ggRadar绘图显示值与数据框不符问题求助
问题解决思路与修正方案
核心问题分析
你遇到的数值显示异常,主要由两个原因导致:
ylim参数设置错误:代码里ylim = c(1,1)会强制雷达图的y轴范围固定为1,所有数据点都会被压缩到同一位置,直接导致数值显示完全失真。- 过滤数据时丢失了雷达图必需的极值行:
ggRadar(来自fmsb包)要求数据框的前两行必须是各指标的最大值和最小值,用来定义雷达图的轴刻度范围。如果过滤操作删掉了这两行,函数会自动用当前过滤后数据的列极值重新计算轴,导致刻度和原图表不一致,看起来数值异常。
修正步骤与代码
1. 修正数据过滤逻辑,保留极值行
过滤时要保留原数据的前两行极值,再合并目标分组数据:
library(dplyr) library(stringr) # 提取前两行的极值行 + 过滤出PlotNames包含SUB_的行 df.Plot.PI.SUB <- df.Plot.PI.total %>% slice(1:2, which(str_detect(PlotNames, "SUB_")))
2. 修正ylim参数
将ylim改成合理的数值范围(比如你的指标实际最小值和最大值,示例用c(0, 10)),或者直接去掉该参数,让ggRadar自动根据极值行计算刻度:
library(fmsb) p.sub <- ggRadar(df.Plot.PI.SUB, mapping = aes(colour = scenario, facet = PlotNames), size=3, alpha = 0, ylim = c(0, 10))+ # 替换为你实际的数值范围 theme_bw()+ scale_color_manual(name="Scenario", values = cbPalette.PI)+ scale_fill_manual(values = cbPalette.PI, name="Scenario")+ labs(title = "Changes in Protection Indexes (SUB Group)")+ theme(plot.title = element_text(size = 20,face = "bold"), strip.text.x = element_text(size = 14), legend.title = element_text(face="bold",size = 18), legend.text = element_text(size = 16), legend.position = "bottom", text = element_text(size=18), axis.text = element_text(size=14),axis.title = element_text(size=14))
额外验证
运行完过滤代码后,可以用head(df.Plot.PI.SUB)检查数据框的前两行是否还是原来的极值行,确保结构正确;同时检查各指标列的数值范围,确认ylim的设置和实际数据匹配。
内容的提问来源于stack exchange,提问作者larre
相关产品推荐
相关产品推荐

