2013-06-21 2 views
4

я получаю эту ошибку с помощью метода подкрепиться в ggplot2:Ошибка с функцией подкрепиться из ggplot2

Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ‘proj4string’ for signature ‘"NULL"’

Код следующее:

> library(maptools) 
> gpclibPermit() 
> library(ggplot2) 
> library(rgdal) 
> library(rgeos) 
> library(ggmap) 
> brMap <- readShapePoly("Google/BRASIL.shp") 
> brMapDF <- fortify(brMap) 
# This actually works 

# But this don´t 

> brMapDF <- fortify(brMap, region="UF") 

Error in (function (classes, fdef, mtable) : 
      unable to find an inherited method for function ‘proj4string’ for signature ‘"NULL"’ 

Это происходит со всеми шейпфайлы что У меня есть, поэтому я попробовал (в коде выше) с шейп-файлом, который я нашел в stackoverflow Format the ggplot2 map, данные https://docs.google.com/file/d/0B_coFit6AovfcEFkbHBjZEJaQ1E/edit

ответ

1

Это немного обходное решение, но если вы дублируете столбец UF в качестве столбца идентификатора, как показано в примере wiki из моих комментариев при подготовке данных, значения по умолчанию для fortify будут использовать первый столбец в пространственном кадре данных, чтобы отделить полигонов соответственно при добавлении имен под столбцом id.

library(maptools) 
library(ggplot2) 
library(sp) 
library(rgdal) 
library(rgeos) 

brMap <- readShapePoly("Google/BRASIL", IDvar = "UF", 
    proj4string = CRS("+init=epsg:4236"), repair = TRUE, verbose = TRUE) 
[email protected]$id <- [email protected]$UF 
brMapDF <- fortify(brMap) 

Полученная структура brMapDF затем:

'data.frame': 9316 obs. of 7 variables: 
$ long : num -68.6 -68.7 -68.8 -68.8 -68.9 ... 
$ lat : num -11.1 -11.2 -11.2 -11.1 -11.1 ... 
$ order: int 1 2 3 4 5 6 7 8 9 10 ... 
$ hole : logi FALSE FALSE FALSE FALSE FALSE FALSE ... 
$ piece: Factor w/ 37 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ... 
$ group: Factor w/ 81 levels "AC.1","AL.1",..: 1 1 1 1 1 1 1 1 1 1 ... 
$ id : chr "AC" "AC" "AC" "AC" ... 
+0

Отлично! Теперь это сработало :) Спасибо ... но, Не могли бы вы объяснить мне, в чем была проблема? Почему исходный код не работал? – nanounanue

+0

@nanounanue: В топологии вашего файла формы есть ошибка, когда у вас есть 2 перекрывающиеся области, судя по сообщению об ошибке, когда я пытался укрепить шейп-файл, прочитанный readOGR и указанным регионом = «UF». #Error: TopologyException: обнаружено ненастроенное пересечение между LINESTRING (-48.5843 -27.9514, -48.5889 -27.9956) и LINESTRING (-48.5889 -27.9944, -48.5844 -28.066) по -48.588852991466581 -27.99543264943113. –