如果您想保持渐变比例并为上下限制设置两个额外的离散值,我认为最简单的方法是为“限制”和“限制”值设置单独的填充比例。这可以通过在数据子集上单独调用 geom_tile 以及使用 {ggnewscale} 等包来完成。
我认为将离散的“禁区”放在渐变色条的各个极端是有意义的。然后您需要三个geom_tile
调用和三个scale_fill
调用,并且您需要在每个scale_fill
调用中指定引导顺序。然后,您将需要使用图例边距,但让它看起来不错并不是一个大问题。
library(tidyverse)
library(RColorBrewer)
tile_data <- data.frame(
category = letters[1:5],
region = paste0("region_", 1:5),
sales = c(1, 2, 5, 0.1, 300)
)
ggplot(tile_data, aes(
x = category,
y = region,
fill = sales
)) +
geom_tile(data = filter(tile_data, sales <= 11 & sales >=1)) +
scale_fill_gradientn(NULL,
limits = c(1, 11),
colors = brewer.pal(11, "Spectral"),
guide = guide_colorbar(order = 2)
) +
ggnewscale::new_scale_fill() +
geom_tile(data = filter(tile_data, sales > 11), mapping = aes(fill = sales > 11)) +
scale_fill_manual("Sales", values = "black", labels = "> 11", guide = guide_legend(order = 1)) +
ggnewscale::new_scale_fill() +
geom_tile(data = filter(tile_data, sales < 1), mapping = aes(fill = sales < 1)) +
scale_fill_manual(NULL, values = "darkblue", labels = "< 1", guide = guide_legend(order = 3)) +
theme_minimal() +
theme(legend.spacing.y = unit(-6, "pt"),
legend.title = element_text(margin = margin(b = 10)))
由reprex 包于 2021-11-22 创建(v2.0.1)