Учитывая следующие данные:
library(tidyverse)
library(sf)
df <- structure(list(geometry = c("LINESTRING (-85.76 38.34, -85.72 38.38)",
"LINESTRING (-85.46 38.76, -85.42 38.76)",
"LINESTRING (-85.89 38.31, -85.89 38.31)"
), var1 = c(4, 5, 6
), var2 = c(1, 2, 3
)), row.names = c(NA, -3L), class = c("tbl_df", "tbl", "data.frame"
))
df
df_sf <- sf::st_as_sf( df, wkt = "geometry" )
# Simple feature collection with 3 features and 2 fields
# geometry type: LINESTRING
# dimension: XY
# bbox: xmin: -85.89 ymin: 38.31 xmax: -85.42 ymax: 38.76
# CRS: NA
# # A tibble: 3 x 3
# geometry var1 var2
# <LINESTRING> <dbl> <dbl>
# 1 (-85.76 38.34, -85.72 38.38) 4 1
# 2 (-85.46 38.76, -85.42 38.76) 5 2
# 3 (-85.89 38.31, -85.89 38.31) 6 3
Мы можем использовать plot
для построения данных, включая LINESTRING
, который имеет две точки в одном месте (строка = 3):
plot(st_geometry(df_sf), lwd = 10)
, что дает:
но когда мы строим его, используя ggplot
, точка опускается:
ggplot() +
geom_sf(data = df_sf, lwd = 8)
Без ручного извлечения местоположений, содержащих только точку, есть ли быстрый способ указать ggplot
их построить? Я вижу, что эти точки технически не являются линией, поскольку между ними нет расстояния, но plot
может их поднять. Этот вопрос кажется связанным, но немного другим, мои LINESTRING
уже созданы.
спасибо