2016-09-15 3 views
1

У меня возникли проблемы с построением полигонов, и я не могу понять, почему. Вот мой код:geom_polygon и geom_path не удалят соединительные линии

#Load coordinates 
ices <- read.csv("FILE PATH/ices_coord.csv", sep = ",") 
#Reproject to European projection 
coordinates(ices)<-c("long","lat") 
proj4string(ices) <- CRS("+proj=longlat") 
ices_laea<-spTransform(ices, CRS("+proj=laea")) 
#Create dataframe 
ices_laea_df<-data.frame(ices_laea) 

library(ggplot2) 
ggplot()+ 
    geom_polygon(data=ices_laea_df, aes(long,lat,group=group), fill="white", color = "gray70") 

Я получаю эту карту enter image description here

НО как мне избавиться от соединительных линий (я окрашена два в красном цвете, но есть и более). Я был совершенно уверен, что использование «group = group» или «group = ICES_area» будет работать, но это не так. И я уже потерял половину мои волосы :)

Использование geom_path вместо geom_polygon дает тот же результат ...

Вы уже столкнулись с этим вопросом? Вы знаете трюк, чтобы исправить это?

Большое спасибо за вашу помощь,

Фред

PS: you can download the ICES coordinates here

+0

Есть ли данные о заказе, в котором эта точка должна быть визуализирована? Кажется, что у вашего CSV нет этого, и, похоже, какой-то из полисов делает что-то грязное. например ices_laea_df <- ices_laea_df%> фильтр (группа == 14) – pluke

ответ

3

ЭТО НЕ ОТВЕТ, НО КОД, чтобы иллюстрировать:

ices <- readr::read_csv("ices_coord.csv") 

purrr::map_lgl(unique(ices$ICES_area), function(area) { 
    poly <- dplyr::filter(ices, ICES_area==area) 
    identical(poly[1,], poly[nrow(poly),]) 
}) 

## [1] FALSE TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE FALSE 
## [11] TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE 
## [21] FALSE FALSE TRUE TRUE FALSE TRUE TRUE FALSE TRUE TRUE 
## [31] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 

Те, все должны быть TRUE для вы должны получить привлекательные многоугольники, о которых вы просите (полигоны и пути - это упорядоченные списки точек с полигоном, имеющим условие, что конец начала & то же), и это будет практически невозможно сказать, что с тех пор:

dplyr::count(ices, ICES_area, long, lat) %>% 
    dplyr::filter(n>1) %>% 
    dplyr::ungroup() %>% 
    dplyr::count(ICES_area) %>% 
    dplyr::select(area=1, duplcated_pts=2) %>% 
    print(n=39) 
## # A tibble: 39 × 2 
##  area duplcated_pts 
## <chr>   <int> 
## 1  Ia    1 
## 2  Ib    2 
## 3 IIa   311 
## 4 IIb   322 
## 5 IIIa    9 
## 6 IIIb    1 
## 7 IIIc    1 
## 8 IIId   76 
## 9 IVa    1 
## 10 IVb    1 
## 11 IVc    1 
## 12 IXa    1 
## 13 IXb   10 
## 14 Va    6 
## 15 Vb   29 
## 16 VIa    1 
## 17 VIb   21 
## 18 VIIa    1 
## 19 VIIb    1 
## 20 VIIc   21 
## 21 VIId    1 
## 22 VIIe    1 
## 23 VIIf    1 
## 24 VIIg    1 
## 25 VIIh    1 
## 26 VIIIa    1 
## 27 VIIIb    1 
## 28 VIIIc    1 
## 29 VIIId   10 
## 30 VIIIe    8 
## 31 VIIj   14 
## 32 VIIk   66 
## 33 Xa   95 
## 34 Xb    1 
## 35 XIIa   106 
## 36 XIIb    1 
## 37 XIIc    1 
## 38 XIVa    1 
## 39 XIVb   65 

Есть много дублированных точек в группу для некоторых групп.

+1

hmmmm ... это выглядит скверно. Таким образом, самым простым решением может быть очистка полигонов в QGIS (или аналогичном), чтобы убедиться, что я получаю TRUE для всех полигонов ... Спасибо за иллюстрацию! :) –

Смежные вопросы