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
相关产品推荐
相关产品推荐

