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

使用rayshader渲染ggplot图时出现hillshade数组不兼容错误的解决

问题:使用rayshader运行plot_gg时出现数组不匹配错误

错误信息

Error in hillshade[, , 1] * scales::rescale(shadowmap, c(max_darken, 1)) : 
  non-conformable arrays

运行代码

library(tidyverse)
library(reshape2)
library(viridis)
library(rayshader)

measles = read_csv("https://tylermw.com/data/measles_country_2011_2019.csv")
melt_measles = reshape2::melt(measles, id.vars = c("Year", "Country", "Region", "ISO3"))
melt_measles$Month = melt_measles$variable
melt_measles$cases = melt_measles$value

# Plot
melt_measles %>% 
  group_by(Year, Month) %>%
  summarize(totalcases = sum(cases,na.rm = TRUE)) %>% 
  mutate(totalcases = ifelse(Year == 2019 & !(Month %in% c("January","February","March")), NA, totalcases)) %>%
  ggplot() + 
  geom_tile(aes(x=Year, y=Month, fill=totalcases,color=totalcases),size=1,color="black") + 
  scale_x_continuous("Year", expand=c(0,0), breaks = seq(2011,2019,1)) +
  scale_y_discrete("Month", expand=c(0,0)) +
  scale_fill_viridis("Total\nCases") +
  ggtitle("Reported Worldwide Measles Cases") +
  labs(caption = "Data Source: WHO") +
  theme(axis.text = element_text(size = 12),
        title = element_text(size = 12,face="bold"),
        panel.border= element_rect(size=2,color="black",fill=NA)) -> 
measles_gg

plot_gg(measles_gg, multicore = TRUE, width = 6, height = 5.5, scale = 300, 
background = "#afceff",shadowcolor = "#3a4f70")

错误成因

这个错误出现在rayshader的阴影计算环节,核心原因是ggplot生成的可视化里存在NA值(2019年4-12月的病例数被设为NA)。这些NA值导致提取的高度矩阵(hillshade)和阴影矩阵(shadowmap)维度不匹配——NA对应的区域没有生成有效高度数据,使得两个数组无法执行逐元素乘法运算,从而抛出数组不匹配的错误。

修复方法

有两种简单的修复方式:

方式1:替换NA值为0

把代码中处理2019年非前三月数据的mutate语句里的NA替换为0,确保所有单元格都有有效数值:

mutate(totalcases = ifelse(Year == 2019 & !(Month %in% c("January","February","March")), 0, totalcases))

方式2:让rayshader忽略NA值

在plot_gg函数中添加na.rm = TRUE参数,让rayshader自动忽略NA对应的区域,避免矩阵维度不匹配:

plot_gg(measles_gg, multicore = TRUE, width = 6, height = 5.5, scale = 300, 
        background = "#afceff", shadowcolor = "#3a4f70", na.rm = TRUE)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:01:34