首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RStudio图形设备对于mac上的空间对象来说非常慢。

RStudio图形设备对于mac上的空间对象来说非常慢。
EN

Stack Overflow用户
提问于 2021-01-20 06:22:15
回答 1查看 258关注 0票数 1

我最近得到了一个新的macbook pro,它有一些与R图形相关的问题。在绘制sf对象时,R的工作速度非常慢。我找到了一个关于这个问题的几年前的帖子(这里:https://github.com/rstudio/rstudio/issues/3866),但没有提出任何解决方案。作为参考,RStudioGD绘制对象的速度比pdf慢300倍,这让我抓狂。在这里分享上面链接中的可重现示例(尽管系统时间号是我的):

从上面的链接复制<<=:==>>

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

https://gadm.org/download_country_v3.html

代码语言:javascript
复制
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慢得多:

代码语言:javascript
复制
mmr = get_poly()
system.time(plot(mmr))
#    user  system elapsed 
# 128.162   0.510 129.271 
unlink(tdir, recursive = TRUE)

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

代码语言:javascript
复制
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也只需不到1秒

来自链接===>>的<<=结束拷贝

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

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

EN

回答 1

Stack Overflow用户

发布于 2021-01-21 09:47:20

我不能在没有mac的情况下重现这个问题,但你可以试着把文件作为sf对象而不是SpatialPolygonsDataFrame来读取。

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

代码语言:javascript
复制
library(sf)
library(ggplot2)

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

head(mmr)
代码语言:javascript
复制
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...
代码语言:javascript
复制
#base plot:
plot(mmr)

代码语言:javascript
复制
# ggplot2 (recommended)
ggplot(mmr) + geom_sf()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65800377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档