Изменить визуальный порядок значений факторов перекрытия в geom_sf в R - PullRequest
0 голосов
/ 17 февраля 2020

(загрузка библиотек)

library(tidyverse)
library(sf)

Допустим, у нас есть две точки в одной позиции (x, y), но с разными значениями (z):

x<-c(1,1)
y<-c(1,1)
z<-c(0,1)

Я знаю эта точка geom_point изменит порядок отображаемых значений (который находится сверху) на основе порядка набора данных:

ggplot(data=points, aes(x=x,y=y))+geom_point(aes(color=z),size=20)
ggplot(data=points%>%arrange(desc(z)), aes(x=x,y=y))+geom_point(aes(color=z),size=20)

порядок 1 порядок 2

И это все еще работает, если "z" является фактором.

Если я делаю точки в объекты sf и строю их с помощью geom_sf, это работает, если "z" это число c.

ggplot(data=points%>%st_as_sf(x=.,coords=c("x","y"),crs=4326) )+geom_sf(aes(color=z),size=20)

ggplot(data=points%>%st_as_sf(x=.,coords=c("x","y"),crs=4326) %>%arrange(desc(z)))+geom_sf(aes(color=z),size=20)

sf num order 1 sf num order 2

Однако, используя geom_sf с factor (z), ничего не меняется при переупорядочении набор данных.

ggplot(data=points%>%st_as_sf(x=.,coords=c("x","y"),crs=4326) %>%mutate(z=factor(z)))+geom_sf(aes(color=z),size=20)

ggplot(data=points%>%st_as_sf(x=.,coords=c("x","y"),crs=4326) %>%mutate(z=factor(z))%>%
arrange(desc(z)))+geom_sf(aes(color=z),size=20)

sf-коэффициент порядка 1 sf-коэффициент порядка 2

Как я могу принудительно изменить порядок в последнем примере?

Большое спасибо!

1 Ответ

0 голосов
/ 17 февраля 2020

В последнем примере вы можете принудительно изменить порядок, переставив порядок z перед установкой z в качестве коэффициента и присвоив уникальные значения z в качестве уровней факторов следующим образом:

library(tidyverse)
library(sf)

points%>%
  st_as_sf(x=.,coords=c("x","y"),crs=4326) %>%
  arrange(desc(z)) %>%
  mutate(z=factor(z, levels = unique(z))) %>% str()

Classes ‘sf’ and 'data.frame':  2 obs. of  2 variables:
 $ z       : Factor w/ 2 levels "1","0": 1 2
 $ geometry:sfc_POINT of length 2; first list element:  'XY' num  1 1
 - attr(*, "sf_column")= chr "geometry"
 - attr(*, "agr")= Factor w/ 3 levels "constant","aggregate",..: NA
  ..- attr(*, "names")= chr "z"

В выводе str вы можете видеть, что теперь уровни факторов хорошо организованы (от 1 до 0). И если мы построим его, вы получите ожидаемый график:

library(tidyverse)
library(sf)
ggplot(data=points%>%
         st_as_sf(x=.,coords=c("x","y"),crs=4326) %>%
         arrange(desc(z)) %>%
         mutate(z=factor(z, levels = unique(z))))+
  geom_sf(aes(color=z),size=20)

enter image description here

Это отвечает на ваш вопрос?

...