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

无需ggplot2,如何制作双Y轴柱状折线组合图?

用R基础绘图系统制作双Y轴柱状折线组合图(学术简洁风格)

如果你偏好简洁、适配学术出版物的可视化效果,同时不想使用ggplot2处理次坐标轴的复杂度,R的基础绘图系统是理想选择——代码简洁直观,风格低调克制,完全满足学术图表的要求。以下是完整实现步骤:

1. 准备示例数据

模拟符合场景的业务数据(可替换为你的实际数据):

# 示例数据:月份、销售额(主Y轴)、增长率(次Y轴)
months <- factor(c("Jan", "Feb", "Mar", "Apr", "May", "Jun"))
sales <- c(120, 150, 180, 160, 200, 220)
growth_rate <- c(2.1, 3.5, 4.2, 2.8, 5.1, 4.5)

2. 绘制主坐标轴柱状图

先绘制主Y轴的柱状图,调整边距预留次坐标轴空间:

# 调整绘图边距,右侧预留次轴位置
par(mar = c(5, 4, 4, 4) + 0.1)

# 绘制主Y轴柱状图(销售额),采用学术常用的低调配色
barplot(sales, names.arg = months, col = "gray80", 
        xlab = "月份", ylab = "销售额(万元)",
        main = "月度销售额与增长率趋势",
        ylim = c(0, max(sales) * 1.1))  # Y轴范围预留10%余量

3. 添加次坐标轴并绘制折线图

由于双Y轴数值范围差异大,先将折线数据缩放至主Y轴范围,再添加次轴和折线:

# 计算缩放比例:将增长率映射到主Y轴的数值区间
scale_factor <- max(sales) / max(growth_rate)
scaled_growth <- growth_rate * scale_factor

# 添加右侧次坐标轴(增长率)
axis(side = 4, at = seq(0, max(sales), by = max(sales)/5), 
     labels = seq(0, max(growth_rate), by = max(growth_rate)/5))
mtext("增长率(%)", side = 4, line = 3)  # 设置次轴标签

# 绘制折线图(带实心点),用深蓝色突出折线
lines(scaled_growth, type = "b", lwd = 2, col = "darkblue", pch = 16)

4. 优化细节适配学术风格

调整图例、边框等元素,去掉冗余装饰:

# 添加无框图例,避免干扰图表主体
legend("topleft", legend = c("销售额", "增长率"),
       fill = c("gray80", NA), border = NA,
       lty = c(NA, 1), lwd = c(NA, 2),
       col = c(NA, "darkblue"), pch = c(NA, 16),
       bty = "n")

# 仅保留底部和左侧边框,符合学术图表简洁规范
box(bty = "l")

关键优势

  • 代码逻辑直观,无需处理ggplot2的次轴映射规则
  • 配色低调克制,完全适配学术出版物的风格要求
  • 可快速调整任意元素(如颜色、刻度、标签),灵活性强

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:18:55