Как вы располагаете заголовок и легенду в Tmap? - PullRequest
2 голосов
/ 27 марта 2020

Я новичок в программировании, и в настоящее время я зачислен на вводный курс пространственного анализа, в котором используется R. Следующий код выдает приведенные ниже таблицы. Как я могу центрировать заголовок для каждого tmap, а также расположить легенду в верхнем правом углу, не кладя поверх самих карт?

Большое спасибо за вашу помощь.

  ga1 = tm_shape(a2georgia) +
  tm_polygons('PctBlack', style='quantile', breaks=c(4.98,11.75, 22.35,27.64, 32.55, 40.06,   48.18, 79.64),
              n=8, palette=c('lightblue','khaki1', 'red3'), title='Quantiles(8)',
              border.col='grey27', alpha=.9) +
  tm_layout(legend.position = c("right", "top"), title= '% of Population of Black Race', title.position = c('right', 'top'))


ga_cartogram <- cartogram_cont(a2georgia, "PctBlack", itermax=5)

  ga2 = tm_shape(ga_cartogram) + 
  tm_polygons("PctBlack", style='quantile', breaks=c(4.98,11.75, 22.35,27.64, 32.55, 40.06, 48.18, 79.64), 
              n=8, palette=c('lightblue','khaki1', 'red3'), title='Quantiles(8)',
              border.col='grey27', alpha=.9) +
  tm_layout(legend.position = c("right", "top"), title= '% of Population of Black Race',  title.position = c('right', 'top'))


tmap_arrange(ga1,ga2)

Tmaps

1 Ответ

1 голос
/ 28 марта 2020

Проблема в том, что {tmap} dr aws легенда и заголовки внутри ограничительной рамки вашего многоугольника. Чтобы освободить место, вы должны немного расширить ограничивающий прямоугольник.

Некоторое время назад я написал пост в блоге на эту тему c, вы можете захотеть взглянуть на этот https://www.jla-data.net/eng/adjusting-bounding-box-of-a-tmap-map/

Поскольку ваш пример не совсем воспроизводим, я продемонстрирую технику на шейп-файле Северной Каролины, который поставляется с {sf} и, таким образом, широко доступен.

library(sf)
library(tmap)

# NC counties - a shapefile shipped with the sf package
nc <- st_read(system.file("shape/nc.shp", package ="sf"))


# bad, bad map...
tm_shape(nc) + tm_polygons("NWBIR74", style='quantile', 
                           breaks=c(4.98,11.75, 22.35,27.64, 32.55, 40.06, 48.18, 79.64),
                           n=8, palette=c('lightblue','khaki1', 'red3'), 
                           title='Quantiles(8)',
                           border.col='grey27', alpha=.9) +
  tm_layout(legend.position = c("right", "top"), 
            title= '% of Population of Black Race', 
            title.position = c('right', 'top'))

enter image description here

# make some bbox magic
bbox_new <- st_bbox(nc) # current bounding box

xrange <- bbox_new$xmax - bbox_new$xmin # range of x values
yrange <- bbox_new$ymax - bbox_new$ymin # range of y values

# bbox_new[1] <- bbox_new[1] - (0.25 * xrange) # xmin - left
 bbox_new[3] <- bbox_new[3] + (0.25 * xrange) # xmax - right
# bbox_new[2] <- bbox_new[2] - (0.25 * yrange) # ymin - bottom
bbox_new[4] <- bbox_new[4] + (0.2 * yrange) # ymax - top

bbox_new <- bbox_new %>%  # take the bounding box ...
  st_as_sfc() # ... and make it a sf polygon

# looks better, does it?
tm_shape(nc, bbox = bbox_new) + tm_polygons("NWBIR74", style='quantile', 
                           breaks=c(4.98,11.75, 22.35,27.64, 32.55, 40.06, 48.18, 79.64),
                           n=8, palette=c('lightblue','khaki1', 'red3'), 
                           title='Quantiles(8)',
                           border.col='grey27', alpha=.9) +
  tm_layout(legend.position = c("right", "top"), 
            title= '% of Population of Black Race', 
            title.position = c('right', 'top'))

enter image description here

...