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

Plotly分组条形图优化求助:按国家展示男女占比及显示调整

解决Plotly分组条形图按性别区分颜色并显示国家名称的问题

问题背景

现有如下数据处理代码:

df<-data.frame(
  Country=c('Aruba','Benin','Albania','Aruba','Benin','Albania'),
  Year=c(2010,2010,2010,2011,2011,2011),
  share_female=c(0.6315789,0.5833333,0.2500000 ,0.6315789,0.5833333,0.2500000),
  share_male=c(0.36842105,0.41666667,0.75000000,0.36842105,0.41666667,0.75000000))%>%
  data.table()

df$Year<-as.character(df$Year)
df<-melt(df)
df$Country<-as.factor(df$Country)

尝试用以下代码绘制分组条形图时,无法实现需求:

GenderShare <- plot_ly(df, x = ~Year , y = ~value ,
                                 type = 'bar',
                                 name = ~Country)
         
GenderShare

需求要点:

  • 每个柱子下方垂直显示国家名称
  • 图例用不同颜色区分男女占比(如蓝色代表男性、红色代表女性)

解决方案

调整plot_ly的映射参数与布局设置,即可实现目标效果,完整代码如下:

library(plotly)
library(data.table)
library(reshape2)

# 数据处理(保留原逻辑)
df<-data.frame(
  Country=c('Aruba','Benin','Albania','Aruba','Benin','Albania'),
  Year=c(2010,2010,2010,2011,2011,2011),
  share_female=c(0.6315789,0.5833333,0.2500000 ,0.6315789,0.5833333,0.2500000),
  share_male=c(0.36842105,0.41666667,0.75000000,0.36842105,0.41666667,0.75000000))%>%
  data.table()

df$Year<-as.character(df$Year)
df<-melt(df)
df$Country<-as.factor(df$Country)

# 绘制符合需求的分组条形图
GenderShare <- plot_ly(df, 
                       x = ~Country,  # 将国家名称设为x轴
                       y = ~value, 
                       color = ~variable,  # 按性别(share_male/share_female)区分颜色
                       colors = c("share_male" = "#1f77b4", "share_female" = "#ff4b5c"),  # 自定义颜色:蓝色男、红色女
                       type = 'bar',
                       facet_col = ~Year,  # 按年份分面,实现年份维度的分组展示
                       text = ~paste(round(value*100, 1), "%"),  # 可选:显示百分比标签
                       textposition = "auto") %>%
  layout(xaxis = list(tickangle = -90),  # 设置x轴标签垂直显示
         barmode = 'group',  # 启用分组条形图模式
         legend = list(title = list(text = '<b>性别</b>')),
         yaxis = list(title = '<b>占比</b>'))

GenderShare

关键调整说明

  1. x轴映射与标签方向:将x设为~Country,让国家名称显示在柱子下方,通过xaxis = list(tickangle = -90)将标签垂直排列,避免重叠。
  2. 颜色区分逻辑:用color = ~variable绑定性别分组,通过colors参数自定义男女对应的颜色,直接匹配variable列的取值(share_male/share_female)。
  3. 年份分组:使用facet_col = ~Year按年份拆分图表,实现同一年份的国家数据集中展示;搭配barmode = 'group'确保同国家的男女条形是并列分组,而非堆叠。
  4. 可选优化:添加text参数显示百分比标签,提升图表可读性。

内容的提问来源于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 04:27:23