Пакет t_map в R: Как настроить угол текста в некоторых странах? - PullRequest
0 голосов
/ 10 апреля 2020

Я сделал следующую карту, используя t_map:

enter image description here Мой источник данных: lic_bed_sf.csv и в формате .gpkg .gpkg

Мой код выглядит следующим образом:

  tm_shape(lic_bed_sf) +
  tm_polygons("density", 
              id = "county_name", 
              palette = "Blues", 
              border.col = "#555555") +
  tm_layout(fontfamily = "Athelas", 
            legend.position = c("left", "bottom"),
            legend.text.size = 0.8,
            legend.text.fontface = "bold",
            frame = F,
            inner.margins = c(0.12, 0.05, 0.10, 0.05)) + 
  tm_text("county_name", 
          size = 0.50,
          fontfamily = "Kefa", 
          fontface = "bold") + 
  tm_scale_bar(text.size = 0.60) 

Мои вопросы:

  1. Как видите, некоторые названия округов перекрываются, для пример Alamance, Orange и Дарем. Можно ли каким-то образом выбрать эти графства и настроить угол текста в соответствии со значениями на следующей карте?
  2. Как добавить толстую государственную границу, аналогичную показанной на второй карте?

enter image description here

1 Ответ

0 голосов
/ 16 апреля 2020

Редактировать: Это очень хакерский, но показывает, что это можно сделать в принципе. Я вручную добавил линейную линию, основанную на том, где был центроид Carteret. Техника захвата центроида, вдохновленная этим ответом .

Текст не будет отображаться под повернутым углом, если линия также не нанесена (я сделал линию невидимой с помощью alpha = 0).

lic_bed_sf <- st_read('lic_bed_sf.gpkg')

lic_bed_sf$centroids <-
  st_transform(lic_bed_sf, 29101) %>% 
  st_centroid() %>% 
  st_transform(., '+proj=longlat +ellps=WGS84 +no_defs')

carteretTest <- filter(lic_bed_sf, county_name == "Carteret")

carteretTest$geom <- st_sfc(sf::st_linestring(matrix(c(-76.2, -76.8, 35, 34.7), , 2)),crs = 4326)

tm_shape(lic_bed_sf) +
  tm_polygons("density", 
              id = "county_name", 
              palette = "Blues", 
              border.col = "#555555") +
  tm_layout(fontfamily = "Athelas", 
            legend.position = c("left", "bottom"),
            legend.text.size = 0.8,
            legend.text.fontface = "bold",
            frame = F,
            inner.margins = c(0.12, 0.05, 0.10, 0.05)) + 
  tm_scale_bar(text.size = 0.60) +
  tm_shape(carteretTest) + 
  tm_lines(alpha = 0) +
  tm_text("county_name", 
          size = 0.50,
          fontfamily = "Kefa", 
          fontface = "bold",
          along.lines = T)

enter image description here

...