ggplot2中guide_colourbar可改标签,guide_coloursteps报错
ggplot2中
guide_coloursteps自定义标签报错的解决方法 问题现象
使用guide_colourbar时,能通过自定义labels把颜色条上限的标签替换成>4,但换成guide_coloursteps就会报Breaks and labels are different lengths错误,即便调整标签长度也无法解决。
可复现的正常代码(guide_colourbar版本)
library(ggplot2) ggplot(data = mtcars, aes(x = mpg, y = drat, color = gear)) + geom_point() + scale_color_continuous( type = "viridis", option = 'A', direction = -1, limits = c(3, 4), oob = scales::squish, breaks = seq(3, 4, 0.2), labels = c(seq(3, 3.8, 0.2), '>4'), guide = guide_colourbar( show.limits = TRUE))
报错代码(guide_coloursteps版本)
ggplot(data = mtcars, aes(x = mpg, y = drat, color = gear)) + geom_point() + scale_color_continuous( type = "viridis", option = 'A', direction = -1, limits = c(3, 4), oob = scales::squish, breaks = seq(3, 4, 0.2), labels = c(seq(3, 3.8, 0.2), '>4'), guide = guide_coloursteps( show.limits = TRUE)) # 错误信息: # Error in `f()`: # ! Breaks and labels are different lengths
原因
guide_coloursteps和guide_colourbar的工作逻辑存在差异:当设置show.limits = TRUE时,guide_coloursteps会自动将上下限两个值添加到breaks列表中,导致实际breaks的数量比手动设置的多2个;而guide_colourbar仅显示limits,不会修改breaks的数量。由于自定义labels的长度未匹配自动扩展后的breaks,因此触发报错。
解决方法
方法1:关闭show.limits,手动添加上下限到breaks和labels
自行控制完整的breaks列表,无需让guide自动扩展:
library(ggplot2) ggplot(data = mtcars, aes(x = mpg, y = drat, color = gear)) + geom_point() + scale_color_continuous( type = "viridis", option = 'A', direction = -1, limits = c(3, 4), oob = scales::squish, breaks = c(3, seq(3.2, 3.8, 0.2), 4), # 手动包含上下限 labels = c('3', 3.2, 3.4, 3.6, 3.8, '>4'), # 对应每个breaks的标签 guide = guide_coloursteps())
方法2:匹配show.limits = TRUE时的自动扩展breaks长度
由于show.limits = TRUE会在手动设置的breaks首尾各添加一个值(上下限),因此labels需要多两个元素,分别对应这两个新增的breaks:
library(ggplot2) ggplot(data = mtcars, aes(x = mpg, y = drat, color = gear)) + geom_point() + scale_color_continuous( type = "viridis", option = 'A', direction = -1, limits = c(3, 4), oob = scales::squish, breaks = seq(3, 4, 0.2), labels = c('3', 3.2, 3.4, 3.6, 3.8, '>4'), # 长度=手动breaks长度+2 guide = guide_coloursteps(show.limits = TRUE))
通过以上两种方法,即可正常生成带自定义标签的颜色阶梯图例。
内容的提问来源于stack exchange,提问作者Miao Cai
相关产品推荐
相关产品推荐

