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

Malaria Atlas Project绘图自定义问题:autoplot报错与图层叠加故障

问题解决与可修改源码

1. 解决autoplot(raster)参数被忽略问题

默认的autoplot.raster方法不支持legend_title这类自定义参数,必须使用MAP包的autoplot.MAPraster方法,调用前要确保传入的是MAPraster对象(普通栅格可通过as.MAPraster()转换)。

2. 修复autoplot.MAPraster源码的subset错误

原源码中object[object$raster_name == rastername,]的错误,是因为object是S4对象,不能直接用数据框索引方式。以下是修复后的可修改源码,改用槽提取数据:

autoplot.MAPraster <- function(object, rastername = NULL, 
                               legend_title = "Value", 
                               fill_scale = ggplot2::scale_fill_viridis_c(),
                               ...) {
  # 处理默认栅格名称
  if (is.null(rastername)) {
    rastername <- names(object@rasters)[1]
  }
  
  # 提取对应栅格数据(修复subset错误)
  raster_data <- object@rasters[[rastername]] %>%
    raster::as.data.frame(xy = TRUE) %>%
    dplyr::rename(value = !!rastername)
  
  # 构建ggplot图形
  p <- ggplot2::ggplot() +
    ggplot2::geom_raster(data = raster_data, 
                         ggplot2::aes(x = x, y = y, fill = value)) +
    fill_scale +
    ggplot2::labs(fill = legend_title) +
    ggplot2::coord_equal() +
    ggplot2::theme_minimal()
  
  return(p)
}

3. 叠加MDG行政边界的group错误解决

用getShp获取的shape建议转成sf对象,用geom_sf替代geom_polygon,避免group列缺失问题;若坚持用geom_polygon,需先将shape转成带group列的数据框。

完整示例代码

library(malariaAtlas)
library(ggplot2)
library(sf)
library(dplyr)

# 获取MAP栅格数据(示例)
raster_data <- getRaster(surface = "Plasmodium falciparum PR2-10", 
                         extent = getShp(country = "Madagascar", admin_level = 0))
map_raster <- as.MAPraster(raster_data)

# 获取MDG一级行政边界
mdg_admin1 <- getShp(country = "Madagascar", admin_level = 1)

# 调用修改后的autoplot.MAPraster
p <- autoplot(map_raster, 
              legend_title = "P. falciparum PR2-10",
              fill_scale = scale_fill_viridis_c(option = "magma"))

# 推荐:用geom_sf叠加边界
p + geom_sf(data = mdg_admin1, color = "white", fill = NA, linewidth = 0.5)

# 备选:用geom_polygon叠加(需转数据框)
mdg_admin1_df <- ggplot2::fortify(mdg_admin1)
p + geom_polygon(data = mdg_admin1_df, aes(x = long, y = lat, group = group), 
                 color = "white", fill = NA, linewidth = 0.5)

关键说明

  • 修复后的源码直接提取MAPraster对象的rasters槽数据,避免了原代码的索引错误。
  • geom_sf处理空间数据更稳定,无需手动维护group列,是优先推荐的方式。
  • 修改后的autoplot.MAPraster支持直接传入legend_title、自定义填充比例尺等参数,不会出现参数被忽略的警告。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 19:01:08