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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:57:01