r - 无法分配 geom_raster 大小向量的问题

标签 r ggplot2 raster r-sf r-raster

我对geom_raster函数中反复出现的大小向量无法分配问题感到惊讶。这个问题发生在小数据集上,在我的例子中,有 1559 个观察值。我尝试这样做:

# Read the raster in data frame format
ras_df<-read.csv("https://raw.githubusercontent.com/Leprechault/trash/main/myraster_df.csv")
str(ras_df)
#'data.frame':  1559 obs. of  3 variables:
# $ cc       : num  65 85.6 82.7 85.6 89.4 ...
# $ longitude: num  -50.6 -50.6 -50.6 -50.6 -50.6 ...
# $ latitude : num  -24.2 -24.2 -24.2 -24.2 -24.2 ...

# Representation
ggplot() +
  geom_raster(data = ras_df , aes(x = longitude, y = latitude, fill = cc)) + 
  scale_fill_gradientn(name="Canopy cover",colours = rev(terrain.colors(100)))+
  xlab("longitude") + ylab("latitude") +
  theme_bw() + 
  coord_quickmap() +
  theme(panel.border = element_blank(), panel.grid.major = element_blank(),
panel.grid.minor = element_blank(), axis.line = element_line(colour = "black"),
text=element_text(size=16,  family="serif"),legend.position="bottom")
#
#
#Error: 20254.0 Gb size vector cannot be allocated

但是如果我使用普通的 plot() 函数,这种情况就不会发生,但我会寻找更漂亮的表示形式,例如 ggplot2 输出。一些包含某些解决方案的帖子对我来说效果不太好(例如,SpatialPixelsDataFrame 转换和容差控制)。

请问,我有什么解决办法吗?

最佳答案

错误附带的警告提供了信息

In addition: Warning messages:
1: Raster pixels are placed at uneven horizontal intervals and will be shifted. Consider using geom_tile() instead.
2: Raster pixels are placed at uneven vertical intervals and will be shifted. Consider using geom_tile() instead.

当数据具有虚假精度时,就会发生这种情况,因此 geom_raster 尝试创建一个非常精细的网格,但会使用大量内存。

解决方案是将数据四舍五入到适当的精度。

library(tidyverse)
ras_df <- ras_df %>% mutate(across(c(latitude, longitude), round, digits = 4))

然后情节就可以正常工作了。

关于r - 无法分配 geom_raster 大小向量的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67724203/

相关文章:

r - 编码 R 笛卡尔平面

r - geom_bar 根据值使用 geom_point 颜色对数据进行分组

shell - 将灰度图像转换为渐进式黑色加透明度?

r - 将 ggplot2 和 facet_grid 一起用于连续变量和分类变量 (R)

r - 提取多边形质心坐标

r - makePSOCKcluster(names = spec, ...) 错误 : Cluster setup failed. 3 个工作人员中的 3 个无法连接

r - 删除任何重复项及其对

r - 如何轻松地可视化矩阵?

r - 根据 ggplot2 分组对条形进行着色和阴影/纹理

r - ggplot2:在准时间轴上绘制时间序列和多点预测