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

如何在ggradar中将坐标轴转换为对数刻度?

问题描述

我正在使用ggradar绘制雷达图,数据值范围从0.1到450。我设置了5作为临界值以突出显示大于该数值的点,因此配置了values.radar=c(0,5,500)、grid.max=500、grid.min=0、grid.mid=5。但我希望grid.mid与grid.min之间留有足够空间,因此考虑将坐标轴转换为对数刻度,请问有实现该需求的方法吗?非常感谢!

我的代码

library(ggplot2)
library(ggradar)

dggradartest <- read.table("dggradartest 2.csv",sep=",",header=T,row.names=1)
ggradar(dggradartest, grid.max = 500, grid.min = 0, grid.mid = 5, base.size = 15,
        font.radar = "arial", values.radar = c(0, 5, 500), axis.labels = 
        centre.y = -300, plot.extent.x.sf = 1, plot.extent.y.sf = 1,
        x.centre.range = 1, label.centre.y = FALSE, grid.line.width = 1,
        grid.label.size = 0, axis.label.size = 0, group.line.width = 0.1, 
        gridline.min.linetype = "solid", gridline.mid.linetype = "solid", 
        gridline.mid.colour = "blue", axis.label.offset = 1.15,
        axis.line.colour = NA, background.circle.colour = "grey",
        background.circle.transparency = 0.1)

当前生成的图表

雷达图效果

数据集

> dput(dggradartest)
structure(list(X0 = 0L, X1 = 50L, X2 = 100L, X3 = 115L, X4 = 200L, 
    X5 = 250L, X6 = 1L, X7 = 35L, X8 = 450L, X9 = 2L, X10 = 0.5, 
    X11 = 3L, X12 = 54L, X13 = 48L, X14 = 1.5, X15 = 1L, X16 = 0.1, 
    X17 = 4L, X18 = 10L), class = "data.frame", row.names = "Score")

解决方案

ggradar本身没有直接支持对数刻度的参数,但可以通过对数据做对数转换+自定义刻度标签的方式模拟对数刻度效果,具体步骤如下:

  1. 处理数据中的0值:对数函数无法处理0,将0替换为极小值(比如0.01,小于你的最小数据0.1)。
  2. 对所有数据取对数(常用对数或自然对数均可)。
  3. 计算原刻度对应的对数值,作为雷达图的网格参数。
  4. 自定义雷达图的刻度标签,显示原数值而非对数后的值,保证可读性。

实现代码

library(ggplot2)
library(ggradar)

# 加载数据集
dggradartest <- structure(list(X0 = 0L, X1 = 50L, X2 = 100L, X3 = 115L, X4 = 200L, 
    X5 = 250L, X6 = 1L, X7 = 35L, X8 = 450L, X9 = 2L, X10 = 0.5, 
    X11 = 3L, X12 = 54L, X13 = 48L, X14 = 1.5, X15 = 1L, X16 = 0.1, 
    X17 = 4L, X18 = 10L), class = "data.frame", row.names = "Score")

# 替换0值并做常用对数转换
dggradartest_log <- log10(replace(dggradartest, dggradartest == 0, 0.01))

# 计算原刻度对应的对数值
log_min <- log10(0.01)  # 对应原0的位置
log_mid <- log10(5)     # 原临界值5的对数值
log_max <- log10(500)   # 原最大值500的对数值

# 绘制对数刻度雷达图
ggradar(dggradartest_log, 
        grid.max = log_max, 
        grid.min = log_min, 
        grid.mid = log_mid, 
        base.size = 15,
        font.radar = "arial", 
        values.radar = c("0", "5", "500"),  # 显示原数值刻度
        axis.labels = colnames(dggradartest),  # 补全轴标签参数
        centre.y = -300, 
        plot.extent.x.sf = 1, 
        plot.extent.y.sf = 1,
        x.centre.range = 1, 
        label.centre.y = FALSE, 
        grid.line.width = 1,
        grid.label.size = 4,  # 显示网格标签
        axis.label.size = 3, 
        group.line.width = 0.1, 
        gridline.min.linetype = "solid", 
        gridline.mid.linetype = "solid", 
        gridline.mid.colour = "blue", 
        axis.label.offset = 1.15,
        axis.line.colour = NA, 
        background.circle.colour = "grey",
        background.circle.transparency = 0.1)

注意事项

  • 若偏好自然对数,只需将log10替换为log,同步调整所有对数计算的部分即可。
  • 替换0的极小值可根据数据范围调整,只要小于最小非0数据即可。
  • values.radar设置为原数值的字符串,确保图表显示的是用户熟悉的原始刻度。

内容的提问来源于stack exchange,提问作者Cal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 06:17:10