从简单的要素几何转换为数据框
Convert from simple feature geometry to dataframe
我想绘制两个相邻的形状。这些形状是使用 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 对象。
你已经有了一个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 和范围之类的事情。
我想绘制两个相邻的形状。这些形状是使用 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 对象。
你已经有了一个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 和范围之类的事情。