Radar Chart线条扭曲呈锯齿状,如何优化显示效果?
解决R语言雷达图线条锯齿状扭曲问题
问题描述
使用R语言的fmsb包绘制雷达图时,彩色线条(如左侧深蓝色线条)呈现锯齿状扭曲,而非平滑曲线,需改进该问题。
数据与原代码
样本数据
| Herbizide | Diesel | Energieverbrauch | THG.Emissionen | Bodenabtrag | Regenwürmer_Abnahme | Insekte_abnahme | Tox_Aqua | Tox_terr |
|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
| 0 | 0.68 | 0.68 | 0.69 | 1 | 0 | 0 | 0 | 0 |
| 0.44 | 0.54 | 0.68 | 0.81 | 0.69 | 1 | 0 | 0.42 | 0.42 |
| 1 | 0.14 | 0.7 | 0.4 | 1 | 0 | 0 | 1 | 1 |
原数据结构与代码
# 数据结构 structure(list(Herbizide = c(1, 0, 0, 0, 0.44, 1), Diesel = c(1, 0, 1, 0.68, 0.54, 0.14), Energieverbrauch = c(1, 0, 1, 0.68, 0.81, 0.7), THG.Emissionen = c(1, 0, 1, 0.69, 0.69, 0.4), Bodenabtrag = c(1, 0, 1, 1, 1, 1), Regenwürmer_Abnahme = c(1, 0, 0, 0, 0, 0), Insekte_Abnahme = c(1, 0, 0, 0, 0, 0), Tox_Aqua = c(1, 0, 0, 0, 0.42, 1), Tox_Terr = c(1, 0, 0, 0, 0.42, 1)), row.names = c("1", "2", "3MH_2HH", "1HA_2MH_1HH", "3BS_2MH", "3S"), class = "data.frame") # 原绘图代码 library(fmsb) library(scales) umw_ris<- rbind(rep(1,8) , rep(0,8) , umw_old) coul2<-c("blue2", "steelblue2","springgreen4","springgreen2") radarchart(umw_ris, axistype=1, #custom polygon pcol=coul2, plwd=4 , plty=1, #custom the grid cglcol="grey", cglty=3, axislabcol="gray20", caxislabels=seq(0,1,5), calcex=0.8,cglwd=0.4,vlcex=1) dev.off()
原绘图效果

改进方案
1. 修复核心数据维度错误
原代码中rbind(rep(1,8), rep(0,8), umw_old)的rep(1,8)和rep(0,8)仅生成8个值,但数据包含9个指标列,维度不匹配导致数据错位,这是线条锯齿的主要原因。修正为:
umw_ris <- rbind(rep(1,9), rep(0,9), umw_old)
2. 修正轴标签参数
caxislabels=seq(0,1,5)的步长设置错误,会导致轴标签仅显示0,修正为合理的步长:
caxislabels=seq(0,1,0.2)
3. 修正后的完整代码
library(fmsb) library(scales) # 假设umw_old是你的原始数据框 umw_ris <- rbind(rep(1,9), rep(0,9), umw_old) coul2 <- c("blue2", "steelblue2","springgreen4","springgreen2") radarchart(umw_ris, axistype=1, # 自定义多边形线条 pcol=coul2, plwd=4, plty=1, # 自定义网格 cglcol="grey", cglty=3, axislabcol="gray20", caxislabels=seq(0,1,0.2), calcex=0.8, cglwd=0.4, vlcex=1)
4. 进阶:绘制平滑曲线(使用ggplot2)
如果需要更平滑的雷达图曲线,可使用ggplot2结合ggspider包:
library(ggplot2) library(ggspider) library(tidyr) # 转换数据为长格式 umw_long <- pivot_longer(umw_old, cols = everything(), names_to = "Indicator", values_to = "Value") # 绘制平滑雷达图 ggplot(umw_long, aes(x = Indicator, y = Value, group = name, color = name)) + geom_spider(linetype = 1, size = 1.5, smooth = TRUE) + geom_point(size = 3) + scale_color_manual(values = coul2) + coord_polar() + theme_minimal() + theme(axis.text.x = element_text(size = 10))
内容的提问来源于stack exchange,提问作者Olga Fishkis
相关产品推荐
相关产品推荐

