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

求助:使用Plotly绘制国家维度百分比堆叠条形图出错

问题排查与解决方案

问题根源

你的代码存在几个关键问题导致图表不符合预期:

  • x轴定义错误:使用~list(Year,Country)生成了层级轴,但所有数据均为2013年,无需将Year纳入x轴,这会打乱以国家为维度的展示逻辑。
  • 轴标题颠倒:x轴标题设为"Percentage"、y轴为空,与实际需求(x轴为国家、y轴为占比)完全相反。
  • 颜色映射逻辑冗余:依赖数据框中的color因子列不如直接指定类别与颜色的映射关系清晰。
  • 未配置百分比显示:数据为0-1的小数,但未将y轴格式化为百分比,可读性差。

修正后的代码

library(plotly)

# 生成百分比堆叠条形图
plot_ly(df, x = ~Country, y = ~value, 
        color = ~Age, 
        colors = c("Children" = "royalblue", "Adults" = "red"),
        type = "bar",
        text = ~paste0(round(value * 100, 1), "%"),
        textposition = "auto") %>% 
  layout(barmode = "stack",
         title = '2013年各国儿童与成人占比',
         xaxis = list(title = '国家'), 
         yaxis = list(title = '占比', tickformat = '.0%'),
         legend = list(title = list(text = '年龄段')))

关键修正说明

  1. x轴调整:直接使用~Country作为x轴,聚焦国家维度的占比展示。
  2. 颜色映射优化:通过colors参数直接绑定Age的两个类别与对应颜色,逻辑清晰且易于修改。
  3. 百分比可视化:
    • 用tickformat = '.0%'将y轴小数转换为百分比显示(如0.42→42%)。
    • 添加text参数显示每个堆叠块的具体百分比数值,提升图表信息密度。
  4. 轴标题与图例优化:修正轴标题对应关系,添加图例标题明确分类含义。

特殊数据说明

数据中Mali的儿童与成人占比均为0,会导致该国家无条形显示,属于原始数据本身的情况,若需展示可手动调整数据或添加注释说明。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 08:10:27