R语言plotly如何绘制多柱折线双轴组合图
Plotly R 实现双Y轴分组柱状+折线组合图
实现核心逻辑
- 主Y轴(左侧)映射
share、sale两个数值变量,采用分组柱状图展示,同分类下两个柱子并列排布 - 次Y轴(右侧)映射
cost变量,采用带标记点的折线图展示 - 柱状图填充色按分类变量
model的取值做差异化映射,同model下的两个柱子用同色系不同透明度区分系列 - 坐标轴范围自动适配数据,保证0值对齐避免视觉误导
完整可运行代码
# 加载依赖包 library(plotly) # 构造示例数据集 df <- data.frame (model = c("A", "B", "C","D","E","F"), share = c(12,20,15,9,60,20), sale = c(16,25,18,14,67,28), cost = c(14,19,28,24,57,28)) # 为不同model配置差异化配色 model_colors <- c( "A" = "#2E86AB", "B" = "#A23B72", "C" = "#F18F01", "D" = "#C73E1D", "E" = "#3B1F2B", "F" = "#6A994E" ) # 绘制组合图 plot_ly(data = df) %>% # 左侧Y轴:share柱状图 add_bars( x = ~model, y = ~share, name = "share", marker = list( color = ~unname(model_colors[model]), opacity = 0.9 ), offsetgroup = 0 ) %>% # 左侧Y轴:sale柱状图 add_bars( x = ~model, y = ~sale, name = "sale", marker = list( color = ~unname(model_colors[model]), opacity = 0.6 ), offsetgroup = 1 ) %>% # 右侧Y轴:cost折线图 add_trace( x = ~model, y = ~cost, name = "cost", type = "scatter", mode = "lines+markers", line = list(width = 3, color = "#1D3557"), marker = list(size = 8, color = "#1D3557"), yaxis = "y2" ) %>% # 布局配置 layout( barmode = "group", xaxis = list(title = "Model分类"), yaxis = list( title = "Share/Sale 数值", side = "left", rangemode = "tozero" ), yaxis2 = list( title = "Cost 数值", side = "right", overlaying = "y", rangemode = "tozero", showgrid = FALSE ), legend = list(orientation = "h", y = 1.12, x = 0.3) )
效果说明
运行代码后可得到符合需求的可视化结果:
- 6组分类下共12根柱子,同model的柱子颜色一致,通过透明度区分share、sale两个指标
- 深色折线独立映射右侧Y轴,网格线仅保留左侧主Y轴避免视觉干扰
- 图例横向排布在图顶,不遮挡绘图区域内容,可直接点击图例切换系列显示状态
内容的提问来源于stack exchange,提问作者user18937485
相关产品推荐
相关产品推荐

