RStudio图形设备对于mac上的空间对象真的很慢

Posted

技术标签:

【中文标题】RStudio图形设备对于mac上的空间对象真的很慢【英文标题】:RStudio graphics device really slow for spatial objects on mac 【发布时间】:2021-04-24 06:38:51 【问题描述】:

我最近买了一台新的 macbook pro,但遇到了一些与 R 图形相关的问题。在绘制 sf 对象时,R 的工作速度非常缓慢。我在这个问题上找到了一个已有几年历史的线程(这里:https://github.com/rstudio/rstudio/issues/3866),但从未提出任何解决方案。作为参考,RStudioGD 绘制对象的速度比pdf 慢 >300 倍,这让我抓狂。在此处分享上面链接中的可重现示例(尽管系统时间数字是我的):

>

我想绘制这里找到的缅甸 shapefile:

https://gadm.org/download_country_v3.html

library(rgdal)
library(sp)
tdir = tempdir()

get_poly = function() 
  tmp = tempfile(tmpdir = tdir)
  download.file(
    'https://biogeo.ucdavis.edu/data/gadm3.6/shp/gadm36_MMR_shp.zip',
    tmp
  )
  
  unzip(tmp, exdir = tdir)
  
  readOGR(tdir, 'gadm36_MMR_0', stringsAsFactors = FALSE)

使用 RStudioGD 进行绘图比例如pdf:

mmr = get_poly()
system.time(plot(mmr))
#    user  system elapsed 
# 128.162   0.510 129.271 
unlink(tdir, recursive = TRUE)

重新启动 R 以清除缓存/开销并再次运行:

mmr = get_poly()
tpdf = tempfile(tmpdir = tdir, fileext = 'pdf')
system.time(
  pdf(tpdf)
  plot(mmr)
  dev.off()
)
#    user  system elapsed 
# 0.423   0.027   0.460 
unlink(tdir, recursive = TRUE)

所以使用外部设备大约快 300 倍...有什么想法吗?

png 也需要

>

我使用的是 macOS Big Sur 11.1 RStudio 版本 1.3.1093

(我在这里发布了一些其他与图形相关的模糊问题:quartz device behaving strangely after mac update - R mac,但我不确定这两者是否相关)。

【问题讨论】:

我很想看到这个问题的答案。也只找到了老线程,但是问题在macOS Big Sur上依然存在,R版本4.1.0,terra版本1.4.20,sp版本1.4-6;链接到 GEOS 3.8.1、GDAL 3.2.1、PROJ 7.2.1 【参考方案1】:

我遇到了同样的问题。切换到图形设备后端后已修复:“AGG”。

> system.time(plot(mmr))
   user  system elapsed 
  0.213   0.019   0.243

我的会话信息:

R version 4.1.1 (2021-08-10)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Big Sur 11.6
RStudio 2021.09.0+351 "Ghost Orchid" Release (077589bcad3467ae79f318afe8641a1899a51606, 2021-09-20) for macOS
Mozilla/5.0 (Macintosh; Intel Mac OS X 11_6_0) AppleWebKit/537.36 (KHTML, like Gecko) QtWebEngine/5.12.10 Chrome/69.0.3497.128 Safari/537.36

【讨论】:

好的,这似乎也为我解决了这个问题,但我对后端设备的理解非常有限......更改我的后端设备有什么影响吗?感谢您的帮助!【参考方案2】:

如果没有 mac,我无法重现该问题,但您可以尝试将文件作为 sf 对象而不是 SpatialPolygonsDataFrame 读取。

使用sf::read_sf() 将返回一个sf 对象。 readOGR() 函数返回旧的(更难使用)sp 对象类型。

library(sf)
library(ggplot2)

# Change the path to your downloaded / unzipped location
mmr <- read_sf('Downloads/delete_mmr/gadm36_MMR_0.shp')

head(mmr)
Simple feature collection with 1 feature and 2 fields
geometry type:  MULTIPOLYGON
dimension:      XY
bbox:           xmin: 92.1725 ymin: 8.824445 xmax: 101.1768 ymax: 28.54326
geographic CRS: WGS 84
# A tibble: 1 x 3
  GID_0 NAME_0                                                                                 geometry
  <chr> <chr>                                                                        <MULTIPOLYGON [°]>
1 MMR   Myanmar (((97.79915 8.83028, 97.79944 8.830002, 97.79972 8.830002, 97.8 8.829722, 97.80222 8...

#base plot:
plot(mmr)


# ggplot2 (recommended)
ggplot(mmr) + geom_sf()

【讨论】:

这样会好一些。 RStudioGD 中的渲染时间为 49 秒,而基础图中的 png 为 0.9 秒。 ggplot 在 system.time() 上说它在 0.002 秒内工作,但是当我实际运行它时,轮廓直到几分钟后才出现在绘图面板中:( 我已经问了一下,看起来像这样是较新的 mac 操作系统的一个更深层次的问题。叹息...... RStudio 1.4 昨天发布。可能想尝试一下。【参考方案3】:

我在 mac os 中遇到了同样的问题。我的解决方案是安装 XQuartz (https://www.xquartz.org/),然后使用 x11() 绘制空间对象,但是您需要设置“usePolypath = FALSE”。示例:

library(raster)
fraL1 <- getData('GADM', country='FRA', level=1)
x11()
plot(fraL1, usePolypath = FALSE)

【讨论】:

以上是关于RStudio图形设备对于mac上的空间对象真的很慢的主要内容,如果未能解决你的问题,请参考以下文章

将本地目录中的本地图像包含并调整大小到 Xaringan (remark.js) 演示文稿中...(通过 Mac 上的 Rstudio 使用)

mac格式化移动硬盘的时候,发生错误。MediaKit 报告设备上的空间不足以执行请求的操作。

在RStudio中的mac上创建zip包

mac 上格式化磁盘出现MediaKit报告设备上的空间不足以执行请求的解决办法

在 mac osx 上的 Qt 4.7 中使用光栅图形会导致内存泄漏?

在 Windows 上的 rStudio 上将 r markdown 编织为 pdf 时出现错误 43