Digamos que eu crie um mapa coroplético de NC usando este código:
library(ggplot2)
library(sf)
nc <- sf::st_read(system.file("shape/nc.shp", package = "sf"), quiet = TRUE)
b <- ggplot(nc) +
geom_sf(aes(fill = AREA))
b
A lenda parece como deveria.
Em seguida, uso o código da resposta de Paul a esta pergunta ( Como sombrear formas , que é baseado em Não é possível replicar este gráfico ggplot2 ) para criar uma ggrough
( https://github.com/xvrdm/ggrough ) versão do gráfico.
#devtools::install_github("xvrdm/ggrough")
library(ggrough)
library(magrittr)
#In the popup window, paste this so that parse_rough will use parse_sf for GeomSf.
function (svg, geom)
{
rough_els <- list()
if (geom %in% c("GeomCol", "GeomBar", "GeomTile",
"Background")) {
rough_els <- append(rough_els, parse_rects(svg))
}
if (geom %in% c("GeomArea", "GeomViolin", "GeomSmooth",
"Background")) {
rough_els <- append(rough_els, parse_areas(svg))
}
if (geom %in% c("GeomPoint", "GeomJitter", "GeomDotPlot",
"Background")) {
rough_els <- append(rough_els, parse_circles(svg))
}
if (geom %in% c("GeomLine", "GeomSmooth", "Background")) {
rough_els <- append(rough_els, parse_lines(svg))
}
if (geom %in% c("Background")) {
rough_els <- append(rough_els, parse_texts(svg))
}
if (geom %in% c("GeomSf")) {
rough_els <- append(rough_els, parse_sf(svg))
}
purrr::map(rough_els, ~purrr::list_modify(.x, geom = geom))
}
parse_sf <- function (svg) {
shape <- "path"
keys <- NULL
ggrough:::parse_shape(svg, shape, keys) %>% {
purrr::map(.,
~purrr::list_modify(.x,
points = .x$d,
shape = "path"
))
}
}
nc <- sf::st_read(system.file("shape/nc.shp", package = "sf"), quiet = TRUE)
b <- ggplot(nc) +
geom_sf(aes(fill = AREA))
b
options <- list(GeomSf=list(fill_style="hachure",
angle_noise=0.5,
gap_noise=0.2,
gap=1.5,
fill_weight=1))
get_rough_chart(b, options)
Isso produz:
No entanto, a parte da caixa de cores da legenda agora está faltando. Existe uma maneira de exibi-la?
Note que em alguns casos, a legenda funciona. Não tenho certeza se é uma coisa discreta ou contínua, mas a legenda neste ggrough
gráfico discretamente colorido na resposta de Z.Lin a esta pergunta funciona ( Não é possível replicar este gráfico ggplot2 ).
Parece que
ggrough
ourough.js
não consegue lidar comguide_colorbar
. Portanto, uma opção para obter uma legenda seria alternar parascale_fill_binned
que automaticamente faz algum binning da variável de preenchimento e usaguide_colorsteps
:Como alternativa, você pode ficar com o gradiente de cor para o mapa, mas mudar para eg,
guide_colorsteps
para o qual eu sugeriria definir explicitamente os limites para a escala (caso contrário, eu obtenho uma caixa cinza adicional para os limites, o que pode ser um bug). Finalmente, uma terceira abordagem seria discretizar manualmente a variável de preenchimento e usar uma escala de preenchimento discreta.