Plotly堆叠条形图Y轴百分比异常问题求助
Plotly堆叠条形图问题解决方案
问题现象
- Y轴上的百分比未按数值排序,刻度终止于中间位置而非顶部
- Y轴最大值仅到11.3%,未达到预期的100%
问题根源
你的代码存在两个核心问题:
- 将计算后的百分比直接转为带
%的字符串(paste0(round(n/sum(n)*100, digits = 1), "%")),Plotly无法识别字符串为数值类型,导致Y轴按字符串排序、堆叠逻辑失效 - 计算百分比时未按
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
相关产品推荐
相关产品推荐

