Могу ли я использовать scatterp ie с sf и ggspatial? - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь составить карту, а затем положить p ie диаграммы на нее в разных точках. Я пытаюсь следовать этому руководству для создания карт: https://www.r-spatial.org/r/2018/10/25/ggplot2-sf-2.html

Мои карты работают отлично, и у меня есть одна, которая мне нравится, но сейчас я пытаюсь добавить p ie отображает его с помощью пакета scatterp ie, и я продолжаю получать сообщение об ошибке «Дискретное значение передается в непрерывном масштабе». Я думаю, это потому, что разные пакеты, которые я использую, используют разные методы заполнения для построения графиков. Кто-нибудь знает способ обойти это? Вот код для карты, которую я использую, она прекрасно работает:

library("ggplot2")
theme_set(theme_bw())
library("sf")
library("rnaturalearth")
library("rnaturalearthdata")
latitude=c(37.5,37.5,37.3)
longitude=c(-89.2,-88.9,-88.9)
pos=c(4,6,40)
neg=c(3,28,138)
ILdata=data.frame(latitude,longitude,pos,neg) 
# This makes the map base layer for the world
world <- ne_countries(scale = "medium", returnclass = "sf")
class(world)
# This uses the library maps to make files for the states 
library("maps")
states <- st_as_sf(map("state", plot = FALSE, fill = TRUE))
head(states)
states <- cbind(states, st_coordinates(st_centroid(states)))
# This uses the library 'maps' to extract the counties for each state
counties <- st_as_sf(map("county", plot = FALSE, fill = TRUE))
counties$area <- as.numeric(st_area(counties))
# This takes a subset of counties, you can specify a specific state here
countiesil <- subset(counties, grepl("illinois", counties$ID))
head(counties)
# This is a way to manually add in cities to the map, just type in the name and coordinates
ilcities <- data.frame(state = rep("Illinois", 2), city = c("Chicago", "Carbondale"), lat = c(41.883255, 37.728002), lng = c(-87.631034, -89.215887))
# This formats the cities correctly
(ilcities <- st_as_sf(ilcities, coords = c("lng", "lat"), remove = FALSE, 
                      crs = 4326, agr = "constant"))
# This makes the final map
library("ggspatial")
ggplot(data = world) +
  geom_sf(fill = "antiquewhite1") +
  geom_sf(data = countiesil, aes(fill = area)) +
  geom_sf(data = states, fill = NA)+ 
  geom_point(data = ILdata, aes(x = longitude, y = latitude), size = 4, 
             shape = 23, fill = "darkred")+ 
  geom_sf(data = ilcities) +
  geom_text_repel(data = ilcities, aes(x = lng, y = lat, label = city), 
                  fontface = "bold", nudge_x = c(1, -2), nudge_y = c(0.4,0.25)) +
  annotation_scale(location = "bl", width_hint = 0.4) +
  annotation_north_arrow(location = "bl", which_north = "true", 
                         pad_x = unit(0.75, "in"), pad_y = unit(0.5, "in"),
                         style = north_arrow_fancy_orienteering) +
  coord_sf(xlim = c(-92, -87), ylim = c(36.8, 42.8), expand = FALSE) +
  xlab("Longitude") + ylab("Latitude") +
  ggtitle("Sites", subtitle = "(14 sites across Illinois)") +
  theme(panel.grid.major = element_line(color = gray(0.5), linetype = "dashed", 
                                        size = 0.5), panel.background = element_rect(fill = "aliceblue"))

И я хотел бы добавить scatterpies с этим (который прекрасно работает отдельно от моей карты):

+geom_scatterpie(aes(x=longitude, y=latitude), data=ILdata, cols=c("pos", "neg"))

Будет ли это работать? Есть ли другой способ добавить p ie диаграммы, где мои очки? Я просто хочу, чтобы они были p ie диаграммами, показывающими процент положительных и отрицательных значений в моем маленьком наборе данных.

Любая помощь будет оценена! Спасибо!

...