假设我使用以下代码创建了 NC 的分级统计图:
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
图例看上去就像它本来的样子。
然后,我使用 Paul 对这个问题的回答中的代码(如何阴影形状,它本身基于无法复制这个 ggplot2 图)来创建ggrough
(https://github.com/xvrdm/ggrough)版本的图。
#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)
得出的结果为:
但是现在图例的颜色框部分不见了,有没有什么办法可以显示出来呢?
请注意,在某些情况下,图例确实有效。我不确定它是离散的还是连续的,但ggrough
Z.Lin 对此问题的回答中这个离散颜色图中的图例有效(无法复制此 ggplot2 图)。
看起来好像
ggrough
或rough.js
无法处理guide_colorbar
。因此,获取图例的一个选项是切换到scale_fill_binned
它会自动对填充变量进行一些分箱并使用guide_colorsteps
:作为替代方案,您可以继续使用地图的颜色渐变,但切换到例如
guide_colorsteps
,我建议明确设置比例的限制(否则我会得到一个额外的灰色框作为限制,这可能是一个错误)。最后,第三种方法是手动离散化填充变量并使用离散填充比例。