#r #ggplot2 #sf
#r #ggplot2 #sf
Вопрос:
Я создаю карту, а затем добавляю поверх нее несколько городов, и я хочу иметь несколько элементов легенды.
Пока у меня есть этот код:
library(tidyverse)
library(raster)
library(sf)
library(maptools)
#a location to add to the map
city <- tibble(y = c(47.7128),
x = c(74.0060))
city <- st_as_sf(city, coords = c("x", "y"), crs = " proj=longlat ellps=WGS84 datum=WGS84 no_defs towgs84=0,0,0")
#world map to plot, along with a raster of distance from a point
data(wrld_simpl)
wrld_simpl_sf <- sf::st_as_sf(wrld_simpl)
r <- raster(wrld_simpl, res = 1)
wrld_r <- rasterize(wrld_simpl, r)
#
pt1 <- matrix(c(100,0), ncol = 2)
dist1 <- distanceFromPoints(r, pt1)
values(dist1)[values(dist1) > 5e6] <- NA
plot(dist1)
gplot_data <- function(x, maxpixels = 50000) {
x <- raster::sampleRegular(x, maxpixels, asRaster = TRUE)
coords <- raster::xyFromCell(x, seq_len(raster::ncell(x)))
## Extract values
dat <- utils::stack(as.data.frame(raster::getValues(x)))
names(dat) <- c('value', 'variable')
dat <- dplyr::as.tbl(data.frame(coords, dat))
if (!is.null(levels(x))) {
dat <- dplyr::left_join(dat, levels(x)[[1]],
by = c("value" = "ID"))
}
dat
}
gplot_dist1 <- gplot_data(dist1)
gplot_wrld_r <- gplot_data(wrld_r)
#plot data
ggplot()
geom_sf(data = wrld_simpl_sf, fill = "grey20",
colour = "white", size = 0.2)
geom_tile(data = gplot_dist1,
aes(x = x, y = y, fill = value))
scale_fill_gradient("Distance",
low = 'yellow', high = 'blue',
na.value = NA)
geom_sf(data = city, fill = "red", color = "red", size = 3, shape = 21)
которое возвращает:
Все это прекрасно, но теперь я просто хочу добавить красную точку из geom_sf(data = city, fill = "red", color = "red", size = 3, shape = 21)
в легенду с надписью «Города».
Комментарии:
1. Я получаю
Error in discrete_scale(aesthetics, "hue", hue_pal(h, c, l, h.start, direction), : unused argument (values = "red")
Ответ №1:
Вы могли бы использовать функцию scale_color_manual. Насколько я понимаю (я узнал об этом сегодня), это позволяет вам сопоставлять цвета с «уровнями», которые затем появляются в легенде.
Изменение вашего кода, чтобы в нем было следующее, делает свое дело.
geom_sf (данные = город, заливка = «красный», aes (цвет = «Города»), размер = 3, форма = 21)
scale_color_manual(значения = c(«Города» = «красный»))
Комментарии:
1. Спасибо, можно ли как-нибудь изменить ее с квадрата на круг (pch 21)?
2. Я не уверен. Мне кажется, что форма зависит от «geom_», который вы используете. Например: df = data.frame(a = 1:10, b = 1:10) ggplot() geom_point(данные = df, aes(x = a, y = b, цвет = «Города»)) scale_color_manual(имя = «», значения = c («Города» = «красный»)) дает круговую легенду