这里的根本问题是离散尺度会降低空水平。您可以使用drop = FALSE
告诉相关秤不要掉空位。
library(ggplot2)
breaks <- (0:10)*0.005
ggplot(faithfuld, aes(waiting, eruptions, z = density)) +
stat_contour_filled(breaks = (0:10)*0.005) +
scale_fill_viridis_d(drop = FALSE)
ggplot(faithfuld, aes(waiting, eruptions, z = 1.1*density)) +
stat_contour_filled(breaks = (0:10)*0.005) +
scale_fill_viridis_d(drop = FALSE)
Created on 2020-11-17 by the reprex package https://reprex.tidyverse.org (v0.3.0)
或者,您可以明确设置限制。但这有点尴尬,因为它需要将中断值转换为格式化字符串。
library(ggplot2)
make_break_labels <- function(breaks, digits = 3) {
n <- length(breaks)
interval_low <- breaks[1:(n-1)]
interval_high <- breaks[2:n]
label_low <- format(as.numeric(interval_low), digits = digits, trim = TRUE)
label_high <- format(as.numeric(interval_high), digits = digits, trim = TRUE)
sprintf("(%s, %s]", label_low, label_high)
}
breaks <- (0:10)*0.005
break_labels <- make_break_labels(breaks)
ggplot(faithfuld, aes(waiting, eruptions, z = density)) +
stat_contour_filled(breaks = (0:10)*0.005) +
scale_fill_viridis_d(limits = break_labels)
ggplot(faithfuld, aes(waiting, eruptions, z = 1.1*density)) +
stat_contour_filled(breaks = (0:10)*0.005) +
scale_fill_viridis_d(limits = break_labels)
Created on 2020-11-17 by the reprex package https://reprex.tidyverse.org (v0.3.0)