मैं sf
पैकेज में (और संबंधित पैकेज) का उपयोग करके आकार में जीआईएस मैप्स बना रहा हूं , पढ़ने के लिए शेपफाइल्स में, और ggplot2
(और दोस्तों) प्लॉटिंग के लिए। यह ठीक काम करता है, लेकिन मैं नदियों और सड़कों जैसी सुविधाओं के लिए (स्वचालित रूप से / प्रोग्राम रूप से) लेबल प्लेसमेंट बनाने का कोई रास्ता नहीं ढूँढ सकता। ये विशेषताएं आम तौर पर अनियमित आकार के साथ, अलंकृत हैं। उदाहरण के लिए विकिमीडिया से जुड़ी छवि देखें।
ggrepel
पैकेज स्वचालित रूप से अंक लेबलिंग के लिए अच्छी तरह से काम है, लेकिन यह अन्य भौगोलिक विशेषताओं कि असतत अक्षांश / देशांतर अंक नहीं हैं के लिए ज्यादा मतलब नहीं है।
मैं व्यक्तिगत रूप से प्रत्येक फीचर पर अलग-अलग टेक्स्ट लेबल लगाकर ऐसा करने की कल्पना कर सकता हूं, लेकिन यदि संभव हो तो मैं कुछ और स्वचालित खोज रहा हूं। मुझे पता है कि इस तरह की स्वचालन एक तुच्छ समस्या नहीं है, लेकिन इसे पहले ही हल कर लिया गया है (आर्किस ने स्पष्ट रूप से मेप्लेक्स नामक एक्सटेंशन के साथ ऐसा करने का एक तरीका है, लेकिन मेरे पास सॉफ़्टवेयर तक पहुंच नहीं है, और मैं इसमें रहना चाहता हूं यदि संभव हो तो आर)।
क्या किसी को ऐसा करने का एक तरीका पता है?
MWE यहां:
#MWE Linestring labeling
library(tidyverse)
library(sf)
library(ggrepel)
set.seed(120)
#pick a county from the built-in North Carolina dataset
BuncombeCounty <- st_read(system.file("shapes/", package="maptools"), "sids") %>%
filter(NAME == "Buncombe")
#pick 4 random points in that county
pts_sf <- data.frame(
x = seq(-82.3, -82.7, by=-0.1) %>%
sample(4),
y = seq(35.5, 35.7, by=0.05) %>%
sample(4),
placenames = c("A", "B", "C", "D")
) %>%
st_as_sf(coords = c("x","y"))
#link those points into a linestring
linestring_sf <- pts_sf %>%
st_coordinates() %>%
st_linestring()
st_cast("LINESTRING")
#plot them with labels, using geom_text_repel() from the `ggrepel` package
ggplot() +
geom_sf(data = BuncombeCounty) +
geom_sf(data = linestring_sf) +
geom_label_repel(data = pts_sf,
stat = "sf_coordinates",
aes(geometry = geometry,
label = placenames),
nudge_y = 0.05,
label.r = 0, #don't round corners of label boxes
min.segment.length = 0,
segment.size = 0.4,
segment.color = "dodgerblue")
ggrepel
, मूल रूप से फिर से काम करें जो आपने पहले ही किया है। इससे यह बहुत कम संभावना है कि आप एक उपयोगी उत्तर देंगे।