使用scales::pretty_breaks搭配geom_sf报错,如何解决?
问题解决:scales::pretty_breaks与geom_sf配合报错的修复
错误原因
使用geom_sf()时,ggplot会自动启用coord_sf()处理地理坐标系,此时不能用针对普通连续数值轴的scale_x_continuous()/scale_y_continuous()——这些函数无法识别地理坐标的特殊处理逻辑,进而触发invalid 'type' (closure) of argument错误。
修复方案
将scale_x_continuous()和scale_y_continuous()替换为地理坐标专用的scale_x_sf()和scale_y_sf(),同样可以传入scales::pretty_breaks()来设置刻度数量。
修正后的代码
library(ggplot2) library(terra) library(sf) filename <- system.file("ex/lux.shp", package="terra") s <- vect(filename) ggplot() + geom_sf(data = st_as_sf(s), fill="white") + theme_bw()+ scale_x_sf(breaks = scales::pretty_breaks(n = 3)) + scale_y_sf(breaks = scales::pretty_breaks(n = 3))
说明
scale_x_sf()和scale_y_sf()是ggplot为地理数据专门设计的刻度调整函数,能正确识别sf对象的坐标系统,配合scales::pretty_breaks()可以按需求生成美观的刻度值,同时避免类型错误。
内容的提问来源于stack exchange,提问作者UseR10085
相关产品推荐
相关产品推荐

