我希望绘制两个彼此相邻的形状。形状是使用transformR包创建的。这段代码将它们相互重叠。
library(transformr)
library(ggplot2)
star_1a <- poly_star(n = 5, st = TRUE)
circle_2a <- poly_circle(st = TRUE)
df1 <- data.frame(
geo = sf::st_sfc(star_1a, circle_2a),
col = c('steelblue', 'green'),
id = c(1, 2)
)
ggplot(df1) +
geom_sf(aes(geometry = geometry))
我可以从每个形状中删除st = TRUE选项以获取数据框,但可以说我不想这样做。如何将sfg对象转换为具有x,y列的数据框,以便可以将圆圈向右移动一点,然后将其转换回sfg对象。
答案 0 :(得分:1)
您已经有一个data.frame,并且可以在其中对st_sfc对象执行转换, 使用基本的affine transformations。例如
df1[1,1] = df1[1,1] + c(2,0)
ggplot(df1) +
geom_sf(aes(geometry = geometry))
解释性注释: df1[1,1]
选择第一列和第一行,即星号。添加c(2,0)
会将其沿x方向平移+2。
您实际提出的问题的答案: 如果确实需要将x,y坐标作为data.frame中的列,则可以使用
df2 = data.frame(st_coordinates(df1[,1]))
但是,对于您描述的用例,上面的第一种方法会更好。不仅因为它更快,更整洁,还因为操纵sf对象本身会处理crs和range之类的事情。