4

我正在尝试从一个简单的 shapefile 加载和绘制图层。这是美国的州界。我可以很好地加载它:

> library("sp","rgdal")

> shape = readOGR("/home/username/data/share/mapnik/world_boundaries/states_EPSG4326.shp", layer="states_EPSG4326")

    OGR data source with driver: ESRI Shapefile 
    Source: "/home/username/data/share/mapnik/world_boundaries/states_EPSG4326.shp", layer:       "states_EPSG4326"
    with 2895 features and 9 fields
    Feature type: wkbPolygon with 2 dimensions

但它无法绘制:

> plot(shape)

There were 50 or more warnings (use warnings() to see the first 50)
There were 50 or more warnings (use warnings() to see the first 50)
> warnings()
Warning messages:
1: Path drawing not available for this device
2: Path drawing not available for this device
3: Path drawing not available for this device
...

我错过了什么?绘图窗口中没有显示任何内容。此 shapefile 中只有单层。我可以在 qgis 中绘制它,我正在尝试寻找替代方案。R 似乎是一个受欢迎的选择,但到目前为止我运气不佳。我用谷歌搜索了这个警告,但没有发现任何有用的东西。

编辑: 我尝试过的每个形状文件都会收到相同的响应。这是我已验证的 shapefile 以相同的方式响应:

http://dds.cr.usgs.gov/pub/data/nationalatlas/statep010_nt00798.tar.gz

这是 sessionInfo() 的输出:

> sessionInfo()
R version 2.15.2 (2012-10-26)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C         LC_TIME=C           
 [4] LC_COLLATE=C         LC_MONETARY=C        LC_MESSAGES=C       
 [7] LC_PAPER=C           LC_NAME=C            LC_ADDRESS=C        
[10] LC_TELEPHONE=C       LC_MEASUREMENT=C     LC_IDENTIFICATION=C 

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] rgdal_0.7-22 sp_1.0-2    

loaded via a namespace (and not attached):
[1] grid_2.15.2     lattice_0.20-10 tools_2.15.2 

这也是一个 gentoo 系统,在 dev-lang/R 上启用了以下使用标志:

  • X icu java jpeg nls openmp png readline tiff

未启用以下使用标志(未编译功能):

  • -bash-completion -cairo -doc -lapack -minimal -perl -profile -static-libs -tk"

对我来说唯一看起来可疑的两个是 cairo 和 tk,是否需要它们来进行绘图?

我以类似但不完全相同的结果从终端运行 R:

> shape = readOGR("/home/username/Downloads/state/statep010.shp", layer="statep010")
OGR data source with driver: ESRI Shapefile 
Source: "/home/username/Downloads/state/statep010.shp", layer: "statep010"
with 62 features and 9 fields
Feature type: wkbPolygon with 2 dimensions
> plot(shape)
There were 50 or more warnings (use warnings() to see the first 50)
> warnings()
Warning messages:
1: In polypath(x = mcrds[, 1], y = mcrds[, 2], border = border,  ... :
  Path drawing not available for this device
2: In polypath(x = mcrds[, 1], y = mcrds[, 2], border = border,  ... :
  Path drawing not available for this device
3: In polypath(x = mcrds[, 1], y = mcrds[, 2], border = border,  ... :
  Path drawing not available for this device
...
4

3 回答 3

3

按照Roger Bivandplot(shape, usePolypath = FALSE)此线程中的描述使用。

于 2012-12-02T05:30:01.953 回答
2

如果您只对绘制行政边界感兴趣,您不能只使用某些 R 包提供的数据源吗?

maps提供全球行政区域。您也可以检索国家/地区边界。请参阅此处与 ggplot 一起使用的示例。

dismo提供来自GADM 数据库的数据。您可以按国家和级别检索数据。

library(maps)
library(raster)

admlim <-getData('GADM', country='USA', level=1)
proj4string(admlim) <- CRS('+init=epsg:4326')
# plot(admlim) # plain plot
# dataframe for ggplot()
# This will take a long, long time for USA level 1 data from GADM
t.adm <- fortify(admlim)
ggplot(aes(long, lat, group = group), data = t.adm,
  colour = 'grey20', fill = NA) +
  geom_path() +
  scale_y_continuous(breaks=(-2:2) * 30) +
  scale_x_continuous(breaks=(-4:4) * 45) +
  coord_map('ortho', orientation=c(41, -74, 0))

以纽约为中心的美国地图

于 2013-04-10T15:24:13.490 回答
1

我有同样的问题,可以通过在安装 libcairo2-dev 和 libpango1.0-dev 后再次编译 R 来解决

在 debian 上:

sudo apt install libcairo2-dev
sudo apt install libpango1.0-dev

我确信之前特别缺少 libpango1.0-dev。然后我用

./configure --prefix=/.../.../R --with-cairo
make && make install

并修复了它。

希望能帮助到你。

于 2017-08-16T15:23:10.877 回答