使用scale_fill_stepsn()进行标记,“中断和标签的长度不同”

Zoe*_*Zoe 2 r ggplot2

这是我的情节:

在此输入图像描述

我使用了这段代码(包括示例数据):

# dummy data
df_test <- data.frame(long = rep(447030:447050, 21),
                      lat = rep(5379630:5379650, each=21),
                      z = rnorm(21*21))

# plot
ggplot(df_test) +
  geom_tile(aes(x=long, y = lat, fill = z)) +
  scale_fill_stepsn(
    limits = c(-3, 3), breaks = seq(-3, 3, 1), # labels = seq(-3, 3, 1),
    colors = c("#ff6f69", "grey90", "#00aedb"))
Run Code Online (Sandbox Code Playgroud)

我希望图例显示最大值和最小值(-3,+3)。但是当我取消注释标签代码时,labels = seq(-3, 3, 1),出现错误:

错误:中断和标签的长度不同”

这是一个错误还是我滥用了该功能?(又名:这是一个错误还是一个功能?)无论哪种方式:你们知道这个问题的任何解决方法/解决方案吗?也许有什么override.aes()(我不太擅长这个功能)?

R版本:4.1.0 | ggplot2版本:3.3.5

(可能相关:不同长度的中断和标签scale_size_binned

编辑:如果我安装 ggplot2 版本 3.3.3,图例中的最后一个框会以某种方式更大(我也不喜欢)。

在此输入图像描述

teu*_*and 5

这只是我认为可能存在错误的解决方法,但您可以稍微调整中断以添加/减去一个非常小的值:

library(ggplot2)

# dummy data
df_test <- data.frame(long = rep(447030:447050, 21),
                      lat = rep(5379630:5379650, each=21),
                      z = rnorm(21*21))

# plot
smallvalue <- 10 * .Machine$double.eps

ggplot(df_test) +
  geom_tile(aes(x=long, y = lat, fill = z)) +
  scale_fill_stepsn(
    limits = c(-3, 3), 
    breaks = c(-3 + smallvalue, -2:2, 3 - smallvalue), 
    labels = seq(-3, 3, 1),
    colors = c("#ff6f69", "grey90", "#00aedb")
  )
Run Code Online (Sandbox Code Playgroud)

由reprex 包(v1.0.0)于 2021-08-06 创建

编辑:

或者,您可以设置内部中断并使用函数作为参数labels

library(ggplot2)

# dummy data
df_test <- data.frame(long = rep(447030:447050, 21),
                      lat = rep(5379630:5379650, each=21),
                      z = rnorm(21*21))

# plot
smallvalue <- 10 * .Machine$double.eps

ggplot(df_test) +
  geom_tile(aes(x=long, y = lat, fill = z)) +
  scale_fill_stepsn(
    limits = c(-3, 3), 
    breaks = -2:2,
    labels = function(x) {x}, # Just display the breaks
    show.limits = TRUE,
    colors = c("#ff6f69", "grey90", "#00aedb")
  )
Run Code Online (Sandbox Code Playgroud)

由reprex 包(v1.0.0)于 2021-08-06 创建