将tmap图例从基于符号更改为基于填充

时间:2019-07-27 00:09:01

标签: r tmap

我有一个带有以下代码的tmap:

  map <- tm_shape(gb_map)+tm_polygons(border.col = 'transparent', col='black')+
  tm_shape(data) +
    tm_dots("pred",palette="OrRd",
            style = "fisher",
            border.col='transparent', 
            title = "Predicted Sales",
            n=5, size =0.03) +
    tm_layout("Predicted Sales", title.size=1, legend.outside = T)

当前处于tmap查看模式。

我希望更改图例,以使图例以正方形表示颜色,因为该符号现在太小了。有什么方法可以使所有内容保持不变,只是将图例更改为基于正方形的图例? (我不能增加符号的大小,因为我希望点在地图上显得很小)。手动添加图例会使我丢失断点,而我不希望这样做,因为我正在使用“ fisher”来确定断裂点。

enter image description here

是否可以更改为这样的图例?

enter image description here

谢谢!

2 个答案:

答案 0 :(得分:0)

因为使用tm_dots,所以将图例作为点得到。使用tm_fill会自动为您提供基于正方形的图例。请提供一些数据,以便我尝试您的代码并提出适当的措施。在执行此操作之前,请先读取您的多边形数据

library("rgdal")
Output.Areas <-  readOGR(".", "shapefile_name")

然后读取您的数据文件

data <- read.csv("File_name.csv")

现在将数据连接到shapefile

merged <- merge(Output.Areas, data, by.x="NAME_1", by.y="NAME_2")

数据(NAME_2)和Output.Areas shapefile(NAME_1)中的公用字段是NAME_1和NAME_2。 现在tm_fill将自动为您提供基于正方形的图例

tm_shape(merged)+
  tm_borders(alpha=.4) +
  tm_fill("pred",palette="OrRd",
          style = "fisher",
          title = "Predicted Sales")

答案 1 :(得分:0)

我认为回答这个问题为时已晚。不过,我认为您需要这样的东西:

library(tidyverse)
library(sf)
library(tmap)

nc = st_read(system.file("shape/nc.shp", package="sf"))

Breaks <- c(0, 2000, 4000, 6000, 31000)
Labels <- c("0 - 2000", "2000 - 4000", "4000 - 6000", ">6000")

tm_shape(nc) + 
 tm_polygons(col="BIR79", title = "Births 1979 - 84", palette = "YlGnBu",
                       breaks = Breaks, labels = Labels) + 
tm_layout(legend.position = c(0.01,0.65),
          scale=0.65,
          legend.frame = T,
          bg.color = "lightblue") + 
tm_compass(size = 5, type = "rose", lwd = 3) + 
tm_scale_bar(breaks = c(0,50,100,150,200),size = 1, position = c(0.06,0),
             lwd = 3)