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

如何在R语言帕累托图中基于次Y轴80%值添加截线

R语言帕累托图添加80%红线解决方案

需求说明

已完成帕累托图主体绘制,需添加两条红色虚线:

  • 在右侧次Y轴80%位置绘制水平红线,与累积频率曲线相交
  • 从交点向下绘制垂直线至X轴

修改后的完整代码

defect <- c(80, 27, 66, 94, 33, 354, 32, 77, 567) 
names(defect) <- c("Jafar", "Ali", "Mamal", "Mosi", "Hamed", "Haney", "Munny", "Funny", "Foony")

d <- data.frame(defect) 

# 修正:将行名转为category列,避免绘图报错
d <- d %>%
  mutate(category = rownames(.)) %>%
  arrange(desc(defect)) %>%
  mutate(
    cumsum = cumsum(defect),
    freq = round(defect / sum(defect), 3),
    cum_freq = cumsum(freq)
  )

## 保存默认绘图参数
def_par <- par() 

# 设置新边距
par(mar=c(5,5,4,5)) 

## 绘制条形图,pc存储条形的x坐标
pc <- barplot(d$freq,
             width = 1, space = 0.2, border = NA, axes = F,
             ylim = c(0, 1.05 * max(d$freq, na.rm = T)), 
             ylab = "相对频率" , cex.names = 0.7, 
             names.arg = d$category,
             main = "帕累托图")

## 标注左侧Y轴
axis(side = 2, at = c(0, d$freq), las = 1, col.axis = "grey62", col = "grey62", tick = T, cex.axis = 0.8)

## 添加图框
box(col = "grey62")

## 绘制累积频率曲线
max_freq <- max(d$freq, na.rm = T)
px <- d$cum_freq * max_freq
lines(pc, px, type = "b", cex = 0.7, pch = 19, col="cyan4")

## 添加右侧Y轴
axis(side = 4, at = seq(0, max_freq, length.out = 5), 
     labels = paste(seq(0, 100, 25), "%", sep=""), 
     las = 1, col.axis = "cyan4", col = "cyan4", cex.axis = 0.8)

## 绘制80%红线
# 计算80%对应的左侧Y轴数值
y_80 <- 0.8 * max_freq
# 找到第一个累积频率≥80%的条形位置
idx <- which(d$cum_freq >= 0.8)[1]
x_pos <- pc[idx]

# 水平红色虚线
abline(h = y_80, col = "red", lty = 2)
# 垂直红色虚线
abline(v = x_pos, col = "red", lty = 2)

## 恢复默认绘图参数
par(def_par)

关键修改说明

  1. 修正标签列:原代码中names.arg = d$category会报错,这里将行名转为category列,确保条形图标签正常显示。
  2. 优化右侧Y轴:改为生成均匀刻度(0%、25%、50%、75%、100%),视觉更规范。
  3. 红线绘制逻辑:
    • 映射80%累积频率到左侧Y轴刻度:y_80 = 0.8 * max(d$freq)
    • 定位第一个达到80%累积频率的条形X坐标
    • 用abline()绘制水平/垂直红色虚线(lty=2代表虚线样式)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:03:31