使用ggplot2组合多幅折线图并仅在指定子图显示坐标轴的方法
R语言分面绘制多折线图优化方案
你可以直接使用ggplot2自带的分面功能实现需求,无需单独生成每个子图,代码更简洁,也能完美匹配「仅底部子图显示X轴、仅第一列子图显示Y轴」的要求。
适用ggplot2 ≥3.5.0版本(推荐)
3.5.0及以上版本的ggplot2新增了axes和axis.labels参数,可以直接控制分面坐标轴的显示范围:
library(ggplot2) library(dplyr) # 1. 筛选目标公司数据 target_firms <- c("Amazon.com Inc", "Facebook Inc", "Apple Inc", "Paypal Holdings Inc") plot_data <- d1_4b %>% filter(conm %in% target_firms) # 2. 分面绘图 ggplot(plot_data, aes(x = datadate, y = pr_margin)) + geom_line() + facet_wrap( vars(conm), nrow = 2, ncol = 2, axes = "margins", # 仅在画布边缘显示坐标轴 axis.labels = "margins" # 仅在画布边缘显示轴标签 ) + labs(x = "日期", y = "利润率") # 可根据需求自定义轴名称
旧版本ggplot2兼容方案
如果你的ggplot2版本低于3.5.0,可以通过主题设置隐藏非边缘位置的坐标轴实现效果:
library(ggplot2) library(dplyr) library(ggh4x) target_firms <- c("Amazon.com Inc", "Facebook Inc", "Apple Inc", "Paypal Holdings Inc") plot_data <- d1_4b %>% filter(conm %in% target_firms) ggplot(plot_data, aes(x = datadate, y = pr_margin)) + geom_line() + facet_wrap2( vars(conm), nrow = 2, ncol = 2, strip.position = "top" ) + theme( # 隐藏非底部子图的X轴 axis.text.x = element_text(size = 10), axis.text.x.top = element_blank(), axis.ticks.x.top = element_blank(), # 隐藏非第一列子图的Y轴 axis.text.y.right = element_blank(), axis.ticks.y.right = element_blank() ) + labs(x = "日期", y = "利润率")
两种方案都不需要单独生成每张子图,运行后直接输出符合要求的组合图。
内容的提问来源于stack exchange,提问作者firmo23
相关产品推荐
相关产品推荐

