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

在R中使用次坐标轴绘制T分数与对应百分位数的问题

在R中用ggplot绘制T分数与对应百分位数(带次坐标轴)

首先是你给出的数据构造代码:

scale <- c("X","Y","Z") 
tScore <- c(55, 70, 43) 
percentile <- pnorm((tScore-50)/10) 
dataFrame <- data.frame(scale,tScore,percentile)

你之前的代码问题出在次坐标轴的转换逻辑上:sec_axis需要的是针对整个X轴的通用转换函数,而不是用数据框里单个点的百分位数值做除法。要实现T分数(底部轴)到百分位数(顶部轴)的映射,得用T分数转百分位数的标准公式:pnorm((x - 50)/10)。

修正后的完整代码如下:

library(ggplot2)

# 构造数据(和你给出的一致)
scale <- c("X","Y","Z") 
tScore <- c(55, 70, 43) 
percentile <- pnorm((tScore-50)/10) 
dataFrame <- data.frame(scale,tScore,percentile)

# 绘制带次坐标轴的图形
ggplot(dataFrame, aes(x = tScore, y = scale)) +
  geom_point(size = 3) +  # 放大点更清晰
  scale_x_continuous(
    name = "T分数",
    limits = c(20, 80),
    sec.axis = sec_axis(
      trans = ~ pnorm((. - 50)/10),  # T分数转百分位数的核心转换公式
      name = "百分位数",
      labels = scales::percent_format(accuracy = 1)  # 将小数转为百分比格式
    )
  ) +
  labs(y = "量表名称") +
  theme_minimal()

关键说明:

  • 次坐标轴的trans参数接收的是一个函数,这里用~ pnorm((. - 50)/10),其中.代表底部轴的任意T分数值,通过这个公式直接转换成对应的百分位数。
  • 用scales::percent_format把转换后的小数(比如0.691)格式化为百分比(69%),更直观。
  • 每个点会同时对应底部的T分数和顶部的百分位数,比如X点的T分数55对应顶部的~69%,和你dataFrame里的percentile列数值完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:15:36