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

Plotly堆叠条形图定制求助:基于给定数据生成目标图表

解决Plotly堆叠条形图的问题

你的代码存在几个关键问题,导致无法生成目标堆叠条形图:

  • 混淆了x轴和y轴的变量,未对应数值型的堆叠维度
  • 错误使用mode='lines'参数,条形图不需要该设置
  • 未区分Male和Female两个堆叠系列,也未开启堆叠模式

以下是修正后的完整解决方案:

步骤1:将数据整理为长格式

先把宽格式的Male/Female列转换为长格式,方便Plotly识别堆叠系列:

library(plotly)
library(tidyr)

# 原始数据
df_t<-data.frame(
  Country=c('Aruba','Armenia','Albania','Bahami','Bhutan','Benin','Aruba','Armenia','Albania','Bahami','Bhutan','Benin'),
  Year=c(2010,2010,2010,2010,2010,2010,2011,2011,2011,2011,2011,2011),
  Male=c(10,10,10,10,10,10,10,10,10,10,10,10),
  Female=c(10,10,10,10,10,10,10,10,10,10,10,10)
)

# 转换为长格式
df_long <- df_t %>% 
  pivot_longer(cols = c(Male, Female), 
               names_to = "Gender", 
               values_to = "Value")

步骤2:绘制堆叠条形图

根据需求(按年份分组,每个国家的条形由男女数值堆叠),使用以下代码:

# 纵向堆叠条形图(年份为x轴,按国家分面,男女数值堆叠)
Chart <- plot_ly(df_long, 
                 x = ~Year, 
                 y = ~Value, 
                 color = ~Gender, 
                 facet_col = ~Country,
                 type = 'bar',
                 barmode = 'stack') %>%
  layout(title = "各国分年份男女数值堆叠条形图",
         xaxis = list(title = "年份"),
         yaxis = list(title = "数值"))

# 若需要横向堆叠条形图,添加orientation='h'并调整轴标签:
# Chart <- plot_ly(df_long, 
#                  y = ~Year, 
#                  x = ~Value, 
#                  color = ~Gender, 
#                  facet_col = ~Country,
#                  type = 'bar',
#                  orientation='h',
#                  barmode = 'stack') %>%
#   layout(title = "各国分年份男女数值堆叠条形图",
#          yaxis = list(title = "年份"),
#          xaxis = list(title = "数值"))

关键说明

  • barmode='stack':开启堆叠模式,让同组的不同系列(Male/Female)堆叠在一起
  • color=~Gender:自动区分不同堆叠系列并生成图例
  • 转换为长格式是Plotly处理多系列堆叠的高效方式,无需手动逐个添加trace
  • 若要将国家作为x轴、年份作为分组,只需调整x和facet_col的对应变量即可

内容的提问来源于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.31 00:57:29