SF绘图‘must have one more break than colour’错误及调色板设置方案
错误原因解析
用sf的plot()函数绘制连续数值字段(比如示例里的gdp_md_est)时,默认会自动生成10个数据区间(对应breaks=10参数),这就需要11种颜色来匹配——因为颜色数量必须比断点数量少1(换句话说,断点数量=颜色数量+1)。你之前设11种颜色刚好契合默认的10个区间,换其他数值就会出现数量不匹配,触发must have one more break than colour错误。
分成4类的解决方法
要把数据分成4类,需要满足颜色数=5(4个区间对应5个断点),同时手动指定断点规则,让颜色数和区间数匹配。下面是两种常用方案:
方案1:自动生成4个区间
通过breaks参数指定划分规则,比如按分位数或等距划分,同时把hcl.colors()的颜色数设为5:
dat1 <- rnaturalearth::ne_countries(returnclass = "sf", scale = 110) # 按分位数分成4类(更适合偏态数据,比如GDP) plot(dat1["gdp_md_est"], key.pos = 4, axes = FALSE, pal = hcl.colors(5, "Dark Mint", rev = TRUE), breaks = "quantile", key.width = lcm(1.3), key.length = 0.75 )
如果想要等距划分,把breaks设为4即可:
plot(dat1["gdp_md_est"], key.pos = 4, axes = FALSE, pal = hcl.colors(5, "Dark Mint", rev = TRUE), breaks = 4, key.width = lcm(1.3), key.length = 0.75 )
方案2:手动指定断点值
如果需要自定义分类分界,直接给breaks传入包含5个值的向量即可:
# 自定义GDP分界:0, 1万, 5万, 20万, 无穷大 custom_breaks <- c(0, 10000, 50000, 200000, Inf) plot(dat1["gdp_md_est"], key.pos = 4, axes = FALSE, pal = hcl.colors(5, "Dark Mint", rev = TRUE), breaks = custom_breaks, key.width = lcm(1.3), key.length = 0.75 )
内容的提问来源于stack exchange,提问作者rez
相关产品推荐
相关产品推荐

