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

ggplot2双Y轴图表:保持轴位置不变,将折线置于柱状图上方

解决ggplot2双Y轴图表图层顺序问题

我接手了一个项目,此前所有图表均由Excel制作,现需使用ggplot2重绘以用于未来报告。我正在绘制双Y轴图表,可视化场地高降雨量与对应水深的关系,希望保持左右Y轴位置不变(左轴仍为水深,右轴仍为降雨量),但将折线图层(水深)置于柱状图层(降雨量)上方而非当前的下方,且不想通过调换轴位置解决,以保持历年报告的连续性。

解决方案

ggplot2的图层渲染顺序完全由代码中添加图层的顺序决定:先添加的图层会被置于底层,后添加的图层会覆盖在上方。原代码中先添加了geom_line(折线),再添加geom_col(柱状),所以柱状层覆盖了折线层。只需调换两个图层的添加顺序,先加柱状层,再加折线层,就能实现折线在上方的效果,同时完全保留原有的轴位置设置。

修改后的完整代码

library(ggplot2)
library(dplyr)
library(lubridate)

Date <- c("2021-01-01","2021-01-01", "2021-01-05", "2021-01-05","2021-01-10", "2021-01-10", "2021-01-15","2021-01-15") 
Rainfall <- c(0.75, 0.5, 0.63, 0.9,0.5, 0.63, 0.9,0.6)
Pool <- c("A","B","A","B","A","B","A","B")
WaterDepth <- c(18,22,17,19,15,24,13,11)
Var4 <- c(1000, 987,905,1002)

nine <- data.frame(Date, WaterDepth,Pool,Rainfall, Var4)
nine<-nine %>% mutate(Date = ymd(Date))

scale2=.05
figa <- ggplot()  +  
  # 先添加柱状图层(置于底层)
  geom_col(aes(x=Date, y = Rainfall/scale2,fill="Rainfall"),width=1,alpha=1)+ 
  # 再添加折线图层(置于上层)
  geom_line(aes(x=Date,y = WaterDepth, color=Pool),linewidth=1.5)+ 
  scale_fill_manual(values = c("#0070C0"))+
  scale_color_manual(values=c("#C55A11","#99CC00"))+
  labs(
    x="Date",y="Water Depth (cm)")+ 
  scale_y_continuous(sec.axis = sec_axis(~.*scale2, name="Rainfall (cm)"),expand=c(0,0),limits=c(0,30)) +
  theme(legend.position="bottom",
        legend.title=element_blank(),
        legend.key.width=unit(.5,"cm"),
        legend.key.height=unit(.2,"cm"))+
  theme(axis.line = element_line(colour = "black"),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.background = element_blank(),
        axis.text=element_text(size=10),
        axis.title=element_text(size=13))+
  labs(color = "Legend")

figa

关键修改说明

  1. 调换了geom_col和geom_line的顺序,确保折线图层后添加,渲染在柱状层上方
  2. 优化了代码中的aes引用方式,直接使用列名而非nine$的形式,符合ggplot2的规范写法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:23:22