将sfc对象坐标转为DataFrame后绘图异常的原因及解决方法
问题原因与解决方法
原因分析
无效的
st_sample参数
你使用的st_sample(..., crs = st_crs(4326))中的crs参数是错误的——st_sample函数并不支持该参数,采样点的坐标系会直接继承自输入的ger对象。这行代码不会导致采样错误,但多余参数容易造成混淆。Base R绘图的比例缺失
sf包自带的plot()方法会自动为地理数据设置asp=1(等比例坐标轴),确保图形形态符合真实地理轮廓。但当你将sfc对象转为普通dataframe后,用Base R默认的plot()绘图时,不会自动维持等比例,会根据画布尺寸拉伸坐标轴,最终导致图形形态完全失真。
解决方法
1. 修正采样代码
移除无效的crs参数,正确的采样代码如下:
p_ger <- st_sample(ger, size = 1000, type = "random")
2. 保持绘图的地理比例
有三种常用方式可以避免形态失真:
方式一:Base R绘图手动设置比例
在调用plot()时指定asp=1,强制保持等比例:df_ger <- sfc_to_df(p_ger) df_ger2 <- df_ger[,3:4] plot(df_ger2, asp = 1)方式二:转回sf对象绘图(推荐)
将dataframe转回sf对象,保留地理属性,用sf的plot()方法自动处理比例:df_ger <- sfc_to_df(p_ger) sf_ger <- st_as_sf(df_ger, coords = c("x", "y"), crs = st_crs(ger)) plot(sf_ger)方式三:用
st_coordinates提取坐标
替代sfc_to_df,直接用sf原生函数提取坐标,再绘图时指定比例:df_ger <- as.data.frame(st_coordinates(p_ger)) plot(df_ger, asp = 1)
内容的提问来源于stack exchange,提问作者procerus
相关产品推荐
相关产品推荐

