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

如何在Plotly R中组合饼图与柱状图并实现1行3列排版?

代码修改方案

原代码核心问题说明

  • 网格列数配置错误:需求为1行3列布局,但原代码grid参数仅设置了2列,无法容纳第三张柱状图
  • 全局坐标轴配置错误:全局关闭了x、y轴的刻度显示,会导致第三列柱状图无法正常展示年月分类、数值坐标轴
  • 子图坐标轴未绑定:多网格布局下第三列的柱状图未指定对应坐标轴ID,会和全局轴冲突
  • 冗余配置:同一个layout内重复定义了showlegend参数
  • 配色未统一:没有显式绑定标签和颜色的映射关系,无法保证饼图、柱状图同标签配色一致

修改后可运行代码

# 第一步:先生成统一配色映射,保证所有图表同标签配色一致
# 提取两个数据框共有的Instr唯一值
instr_unique <- unique(c(ov_backet_instr$Instr, ov_pivot_instr$Instr))
# 生成自定义配色,可根据需求调整调色板函数,这里用RColorBrewer的Paired调色板举例
library(RColorBrewer)
color_map <- setNames(brewer.pal(length(instr_unique), "Paired"), instr_unique)

plot_ly(legendgroup = ~Instr, colors = color_map) %>%
  # 第一个饼图:按Volume统计
  add_pie(
    data = ov_backet_instr, 
    labels = ~Instr,
    values = ~Volume, 
    domain = list(row = 0, column = 0), 
    hole = 0.6,
    textinfo = 'label+value+percent', 
    textposition = 'outside'
  ) %>%
  # 第二个饼图:按Number统计
  add_pie(
    data = ov_backet_instr, 
    labels = ~Instr,
    values = ~Number, 
    domain = list(row = 0, column = 1), 
    hole = 0.6,
    textinfo = 'label+value+percent', 
    textposition = 'outside',
    showlegend = FALSE # 避免饼图重复生成图例
  ) %>%
  # 第三个柱状图:按年月分组统计
  add_bars(
    data = ov_pivot_instr, 
    x=~Year_month, 
    y=~Number, 
    name = ~Instr, 
    text = ~Number, 
    domain = list(row = 0, column = 2),
    xaxis = "x3", # 绑定第三列的x坐标轴
    yaxis = "y3", # 绑定第三列的y坐标轴
    showlegend = FALSE # 避免柱状图重复生成图例
  ) %>%
  layout(
    title = "Channels", 
    showlegend = TRUE,
    grid = list(rows = 1, columns = 3), # 修改为3列
    # 前两列饼图的坐标轴隐藏
    xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
    yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
    xaxis2 = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
    yaxis2 = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
    # 第三列柱状图的坐标轴正常显示,可根据需求调整样式
    xaxis3 = list(showgrid = FALSE, zeroline = FALSE, title = "年月"),
    yaxis3 = list(showgrid = TRUE, zeroline = FALSE, title = "数量")
  )

关键修改说明

  • 提前生成了和Instr唯一值绑定的配色映射,保证所有子图同标签的配色完全一致
  • 网格参数修改为columns=3适配1行3列的布局需求
  • 为第三列柱状图单独绑定了x3、y3坐标轴,仅隐藏前两列饼图的坐标轴,不影响柱状图的坐标轴显示
  • 仅保留第一个饼图的图例生成,避免同一个标签重复出现在图例中,同时保留legendgroup配置,点击图例可同步控制所有子图同标签系列的显示/隐藏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:54:00