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

ggplot设置PRCC结果X轴刻度:符号与下标失效问题求助

LHS-PRCC敏感性分析ggplot刻度设置问题解决

问题背景

我用LHS-PRCC技术对16个参数、10000组参数集做敏感性分析(示例用100组数据测试),生成数据和计算PRCC的代码如下:

df <- cbind(
    pcb = runif(100,0,1),
    pbc = runif(100,0,1),
    psb = runif(100,0,1),
    pbs = runif(100,0,1),
    pci = runif(100,0,1),
    pic = runif(100,0,1),
    psi = runif(100,0,1),
    pis = runif(100,0,1),
    epsilonc = runif(100,0,1),
    epsilons = runif(100,0,1),
    gammac = runif(100,0,1),
    gammas = runif(100,0,1),
    tauc = runif(100,0,1),
    taus = runif(100,0,1),
    sigmab = runif(100,0,1),
    sigmai = runif(100,0,1),
    summary.statistic = runif(100,0,1))

bonferroni.alpha <- 0.05/16
PRCC <- pcc(df[ , 1:16], df[ ,17], nboot = 10000, rank = TRUE, conf = 1- bonferroni.alpha)

用基础ggplot代码能正常出图:

plot <- ggplot(PRCC, mapping = aes(), environment = parent.frame(), ylim = c(-1,1)) + ggtitle("PRCC")

但想给X轴刻度设置带下标和符号的格式时,添加scale_x_discrete后X轴刻度直接消失了,出错代码:

plot <- ggplot(PRCC, mapping = aes(), environment = parent.frame(), ylim = c(-1,1)) + ggtitle("PRCC") + 
scale_x_discrete(breaks=c("pcb","pbc","psb","pbs", "pci","pic", "epsilonc","epsilons","gammac","gammas", "tauc","taus", "sigmab", "sigmai"),labels=c((expression(p[cb])), (expression(p[bc])), (expression(p[sb])), (expression(p[bs])), (expression(p[ci])), (expression(p[ic])), (expression(Epsilon[c])),(expression(Epsilon[s])),(expression(Gamma[c])),(expression(Gamma[s])),(expression(Tau[c])),(expression(Tau[s])),(expression(Sigma[b])),(expression(Sigma[i]))))

问题原因及解决方法

1. 核心问题:参数遗漏+映射未明确

你的breaks参数只列了14个参数,漏掉了原始数据中的psi和pis,导致ggplot无法匹配所有X轴刻度,进而全部消失。另外,原ggplot代码未明确指定X、Y轴的映射关系,这也是绘图逻辑不严谨的地方。

2. 修复后的完整代码

假设你用的是sensitivity包的pcc函数,返回的结果包含Parameter(参数名)、Estimate(PRCC值)、Lower/Upper(置信区间)列,修复后的代码如下:

# 加载必要包
library(ggplot2)
library(sensitivity)

# 生成数据(示例)
df <- cbind(
    pcb = runif(100,0,1),
    pbc = runif(100,0,1),
    psb = runif(100,0,1),
    pbs = runif(100,0,1),
    pci = runif(100,0,1),
    pic = runif(100,0,1),
    psi = runif(100,0,1),
    pis = runif(100,0,1),
    epsilonc = runif(100,0,1),
    epsilons = runif(100,0,1),
    gammac = runif(100,0,1),
    gammas = runif(100,0,1),
    tauc = runif(100,0,1),
    taus = runif(100,0,1),
    sigmab = runif(100,0,1),
    sigmai = runif(100,0,1),
    summary.statistic = runif(100,0,1))

bonferroni.alpha <- 0.05/16
PRCC <- pcc(df[, 1:16], df[,17], nboot = 10000, rank = TRUE, conf = 1 - bonferroni.alpha)

# 转换为数据框(部分pcc返回的是列表,需提取结果)
PRCC_df <- as.data.frame(PRCC$PRCC)
PRCC_df$Parameter <- rownames(PRCC_df)

# 绘图:明确映射+完整刻度设置
plot <- ggplot(PRCC_df, aes(x = Parameter, y = Estimate)) +
    geom_point(size = 3) +
    geom_errorbar(aes(ymin = Lower, ymax = Upper), width = 0.2) +
    ggtitle("PRCC敏感性分析结果") +
    ylim(c(-1, 1)) +
    scale_x_discrete(
        breaks = c("pcb","pbc","psb","pbs", "pci","pic", "psi", "pis", "epsilonc","epsilons","gammac","gammas", "tauc","taus", "sigmab", "sigmai"),
        labels = c(
            expression(p[cb]), expression(p[bc]), expression(p[sb]), expression(p[bs]),
            expression(p[ci]), expression(p[ic]), expression(p[si]), expression(p[is]),
            expression(epsilon[c]), expression(epsilon[s]), expression(gamma[c]), expression(gamma[s]),
            expression(tau[c]), expression(tau[s]), expression(sigma[b]), expression(sigma[i])
        )
    ) +
    theme_bw() +
    theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 旋转X轴标签避免重叠

print(plot)

3. 关键修复点

  • 补全breaks和labels中的所有16个参数,确保与原始数据的参数名完全匹配;
  • 明确指定ggplot的aes映射(x=Parameter, y=Estimate),避免空映射导致的逻辑混乱;
  • 若pcc返回的是列表而非数据框,需先提取核心结果转换为数据框;
  • 可选:添加误差棒展示置信区间,旋转X轴标签避免重叠,提升可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:18:10