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

base R使用hist设置百分比y轴时出现轴数值异常

base R 直方图百分比y轴配置异常

基本情况

  • 使用base R的hist函数绘制数据直方图时,需要将y轴设置为展示百分比/比例值,而非函数默认的频数或密度值
  • 已知这类y轴设置方式在社区存在不少争议,但当前需求明确要求按该方式展示
  • 参考公开技术问题《Histogram does not show densities》下的高赞回答代码逻辑做适配修改,但修改完成后最后一行生成的y轴出现了不符合预期的数值
  • 初步判断异常来自最后一行轴配置代码axis(2, at=p2*sum(p1$counts)/100, labels=p2)的适配偏差
  • 受账号权限限制暂时无法贴出生成的直方图结果,因此提供完整可复现的示例代码用于问题排查
  • 目前暂未理清问题产生的内在逻辑,作为R语言入门用户,这是提交的第一个可复现示例,也欢迎大家对示例代码的规范性提出建设性意见
  • 本可复现示例由reprex包(v0.3.0)于2021-04-03生成

可复现示例代码

library(tidyverse)
library(ggplot2)
library(scales)


df <- data.frame(
  FactorScoreO = c(86.83,81.17,87.17,76.67,84.17,
                   78.17,82.83,71.67,83,68.33,86.83,78.5,75.17,48,89.33,
                   92.17,84.33,73.33,99.17,74.33,96.5,73.83,74.33,79,40.5,
                   26.83,83.67,78.5,95.83,100,64.17,85.83,85.17,56.67,
                   80.83,96.17,95.83,82.5,79.5,79,91.33,83.33,74.67,74,
                   82.17,76.83,91.33,93.83,89.17,88.17,65.83,84.33,80,
                   97.5,58.67,80.67,81,78.83,84.83,80.33,64.83,72,
                   76.67,96.67,75.83,82.67,66.67,71.83,51.67,73.33,43.67,72,
                   86,87.5,88.33,74.17,70.67,59.67,94.17,79,65.33,
                   81.67,54.33,66.33,74.33,68,68.33,73.5,87.5,73.17,85.33,
                   78.5,72.5,96.67,72.83,85.33,65.17,88.17,83.33,59.17,
                   96.5,92,60.17,93.33,82.83,86.67,96.67,83.5,88.33,81,
                   80.83,49.17,76.67,61.83,82.5,76.67,82.17,62.5,83.33,
                   91.67,85.5,56.33,89.83,61.67,75.83,96.67,98.33,
                   92.17,100,68.5),
  FactorScoreM = c(0,0.25,13.75,35.25,0,43,40.5,15,
                   15.25,38.5,2.5,0,0,50.25,34,19.25,21,16.5,0,16,0,
                   26,48.75,30,16.75,55.25,62,40,43.75,0,30.75,6.25,
                   2.25,49.5,13.75,2,0,6.25,11.25,56.75,52.75,2.5,
                   26.75,36,43.5,33.25,87.5,3.5,17.5,2.5,23,0,5,25,
                   52.75,29.25,33,28.75,21.75,11.5,25,48.75,0.25,39.25,15,
                   30.5,35,50.75,32.5,0,54.75,15.25,6,0,20.25,63.75,
                   60.5,3,0,11.5,71.25,3.75,53,35.75,51.25,25.75,30.75,
                   0,0,10.5,46.25,19.5,16.25,1.5,13,23.25,44.75,3.25,
                   12.5,45,0,0,37,28.25,40.5,5,50,45,0,16.25,7.5,
                   22,22.5,52,45.5,25,8.5,15.25,11,47.75,0.25,23.5,
                   18.75,32.5,22.25,35.5,0,64.5,0,0),
       Profile = as.factor(c("1","2","3","3",
                             "2","1","1","3","3","1","3","2","3","1",
                             "3","3","1","3","3","3","2","1","1","1",
                             "1","1","1","1","2","2","1","2","1","1",
                             "1","2","3","1","1","1","1","2","3","1","1",
                             "1","1","3","3","3","2","2","3","2","1",
                             "1","2","3","2","3","2","1","2","3","1",
                             "3","1","1","3","3","1","2","3","2","1",
                             "1","1","1","3","3","1","3","1","1","1",
                             "1","1","3","2","1","3","3","3","3","3","3",
                             "1","3","1","1","3","3","2","2","2","1",
                             "3","1","3","2","2","1","3","1","3","2",
                             "3","1","1","2","2","3","3","1","1","1",
                             "3","1","2","2"))
)

p1 <- hist(df$FactorScoreO[df$Profile=="1"],main="Profile 1", xlab='',ylab='',cex.lab = 2)
p2 <- pretty(p1$counts/sum(p1$counts)*100 )
axis(2, at=p2*sum(p1$counts)/100, labels=p2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 22:36:08