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

如何让geom_line()数据在ggplot2双Y轴柱线图中正常显示?

双Y轴图表折线不显示的解决方法

问题分析

你的图表能正常显示湿度数据点,但无法渲染连接点的折线,核心原因是**Datetime列是字符类型**——ggplot会把离散的字符型x轴视为分类变量,即便只有两个类别,也不会自动绘制折线(折线需要连续型的x轴来连接数据点)。另外代码中ylim(0,1)和scale_y_continuous重复设置,会导致轴范围设置冲突。

解决方案

1. 转换日期时间列类型

将Datetime从字符型转为POSIXct格式的时间类型,推荐用lubridate包简化操作(也可以用基础R的as.POSIXct):

# 先安装并加载lubridate(如果没装过)
install.packages("lubridate")
library(lubridate)

# 根据你的实际时间格式调整函数,比如ymd、dmy_hm等
weather_phase1$Datetime <- ymd_hms(weather_phase1$Datetime)

2. 合并Y轴范围设置

把ylim(0,1)整合到scale_y_continuous中,避免重复设置导致的冲突:

scale_y_continuous(
  name = "Fog (mm)",
  limits = c(0, 1), # 在这里设置Y轴范围
  sec.axis = sec_axis(~.*coeff, name="Humidity (%)")
)

修正后的完整代码

library(ggplot2)
library(lubridate)

# 导入数据集
weather_phase1 <- read.csv("Gobabebmet_phase1.csv", header=TRUE)

# 转换Datetime为时间类型
weather_phase1$Datetime <- ymd_hms(weather_phase1$Datetime) # 请根据实际时间格式调整函数

# 数据转换系数
coeff <- 100

p1 <- ggplot(weather_phase1, aes(x=Datetime)) +
  geom_bar(aes(y=Fog), stat = "identity", fill='#54b8e3') +
  geom_line(aes(y=Humidity / coeff), color = "#bf5aed") +
  geom_point(aes(y=Humidity / coeff)) +
  scale_y_continuous(
    name = "Fog (mm)",
    limits = c(0, 1),
    sec.axis = sec_axis(~.*coeff, name="Humidity (%)")
  ) +
  xlab("Time") + 
  theme_bw() +
  theme(
    text = element_text(size = 20),
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank()
  )

p1 + theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))

内容的提问来源于stack exchange,提问作者Sien Smania

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:04:58