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

Plotly堆叠条形图Y轴百分比异常问题求助

Plotly堆叠条形图问题解决方案

问题现象

  • Y轴上的百分比未按数值排序,刻度终止于中间位置而非顶部
  • Y轴最大值仅到11.3%,未达到预期的100%

问题根源

你的代码存在两个核心问题:

  1. 将计算后的百分比直接转为带%的字符串(paste0(round(n/sum(n)*100, digits = 1), "%")),Plotly无法识别字符串为数值类型,导致Y轴按字符串排序、堆叠逻辑失效
  2. 计算百分比时未按Tijden分组,使用了全局的sum(n),导致百分比计算错误,无法堆叠到100%

修正后的代码

df1 %>%
  group_by(Tijden) %>%  # 按x轴分组,计算每组内的占比
  count(Status) %>%
  mutate(
    pct_value = n / sum(n) * 100,  # 保留数值型百分比,用于Y轴堆叠
    pct_label = paste0(round(pct_value, digits = 1), "%")  # 带%的字符串,用于文本标签
  ) %>%
  plot_ly(
    x = ~Tijden,
    y = ~pct_value,  # 使用数值型百分比作为Y轴数据
    type = 'bar',
    name = ~Status,
    text = ~pct_label,
    textposition = 'auto',
    textangle = 0
  ) %>%
  layout(
    yaxis = list(
      title = "",
      tickformat = ".1f%",  # 设置Y轴刻度显示为带1位小数的百分比
      range = c(0, 100)  # 强制Y轴范围到0-100%
    ),
    barmode = 'stack'
  )

关键改动说明

  • 添加group_by(Tijden):确保每个Tijden分组内的百分比总和为100%
  • 拆分百分比为数值型(pct_value)和标签型(pct_label):数值型用于Y轴的堆叠计算,标签型用于显示文本
  • Y轴设置tickformat = ".1f%":自动将数值转为百分比格式显示,无需手动拼接%
  • 可选添加range = c(0, 100):强制Y轴范围固定在0到100%,确保顶部对齐

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:18:31