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

在R中绘制GHI小时热力图遇异常,请求技术支持

问题排查与修正方案

原代码核心问题

  • 语法错误:最后一行theme(panel.grid=element_blank())前缺失连接符+,导致ggplot对象构建失败。
  • 分面逻辑不符预期:facet_grid(year~month)针对单一年份数据会生成1行12列的布局,和目标示例的分面样式不匹配。
  • 月份赋值冲突:原代码先赋值month <- data$month,随后用儒略日重新计算覆盖原值,若原数据month字段正确则无需此操作。
  • X轴刻度不合理:固定设置breaks =c(1,10,20,31),但部分月份无31天,会显示无效刻度。
  • 依赖包未显式加载:使用lubridate的hm和hour函数但未加载包,可能导致函数未找到报错。

修正后的完整代码

# 加载必需依赖包
library(ggplot2)
library(lubridate)
library(viridis)

# 数据预处理(假设data已正确读取)
day <- data$Day
time <- hm(data$Time)
hour <- hour(time)
year <- 2023
# 若原数据month字段正确,直接使用;否则保留儒略日计算逻辑
# month <- data$month
month <- month(as.Date(paste0("2000-", day), format = "%Y-%j"))
GHI <- data$GHI

# 规范变量名,避免与内置函数冲突
heatmap_df <- data.frame(GHI, year, month, day, hour)

heatmap_GHI <- ggplot(heatmap_df, aes(x = day, y = hour, fill = GHI)) +
  geom_tile(color = "white", size = 0.1) +
  scale_fill_viridis(name = "GHI", option = "C") +
  # 改用facet_wrap实现目标分面布局,将月份数字转为名称
  facet_wrap(~month, ncol = 3, labeller = labeller(month = month.name)) +
  scale_y_continuous(trans = "reverse", breaks = unique(heatmap_df$hour)) +
  # 调整X轴刻度适配所有月份
  scale_x_continuous(breaks = c(1, 10, 20, 30)) +
  theme_minimal(base_size = 8) +
  labs(title = "Hourly GHI values", x = "Day", y = "Hour Commencing") +
  theme(legend.position = "bottom") +
  theme(plot.title = element_text(size = 14, hjust = 0)) +
  theme(axis.text.y = element_text(size = 6)) +
  theme(strip.background = element_rect(colour = "white")) +
  theme(axis.ticks = element_blank()) +
  theme(axis.text = element_text(size = 7)) +
  theme(legend.title = element_text(size = 8)) +
  theme(legend.text = element_text(size = 6)) +
  # 补全缺失的连接符+
  theme(panel.grid = element_blank())

# 输出绘图
print(heatmap_GHI)

关键调整说明

  1. 修复语法错误:补全最后一个theme前的+,确保ggplot图层正确串联。
  2. 优化分面布局:用facet_wrap(~month, ncol=3)生成3列4行的分面,匹配目标示例样式,同时通过labeller参数将月份数字转为英文名称提升可读性。
  3. 调整X轴刻度:将刻度改为c(1,10,20,30),避免显示不存在的日期。
  4. 规范变量命名:将heatmap改为heatmap_df,避免与R内置heatmap()函数冲突。
  5. 显式加载依赖包:开头明确加载所需包,避免函数未找到的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:32:16