R - 在tmap中添加要映射的点

时间:2018-01-12 12:32:46

标签: r dictionary marker tmap

我的地图制作代码根据人口普查数据生成地图,并将重要点绘制为tm_dots()图层。我希望能够做的是区分点的类型(例如,如果位置是“非正式”或“商业”)。

tm_shape(bristol) + tm_fill("population", palette = "YlOrRd", 
auto.palette.mapping = TRUE, 
  title = "Bristol Population", 
  breaks = c(0,5,10,15,20,25), colorNA = "darkgrey") + tm_borders("grey25",alpha = 0.7, lwd = 0.1) +
  tm_dots("n", size=0.1,col="green", shapeNA = NA, title = "Spaces") + 
  tm_legend(text.size=1,title.size=1.2,position=c("left","top")) + 
  tm_layout(legend.outside = TRUE, legend.outside.position = "bottom", title.snap.to.legend = TRUE)

我正在寻找的基本上是:

tm_dots("n", size=0.1,col=Classification, shapeNA = NA, title = "Spaces")

添加多个tm_dots()图层不是一种选择。我也无法重命名点传奇,对此也有任何建议。

Current output

感谢您的帮助!

解决方案

为了将来参考,我通过officesbristol添加到left_join,从而将Classification变量添加到SpatialPolygonsDataFrame。尽管有showNA = NA参数,我仍然遇到显示NA值的问题,但colorNA = NULL有效。最后一行:  tm_dots(size=0.1,col="Classification", palette = "Set1", colorNA = NULL)

2 个答案:

答案 0 :(得分:0)

我想通了,你需要另外一个tm_shape()才能工作。仍然没有得到标题()正确显示,但一步一步。

tm_shape(bristol) + tm_fill("population", palette = "YlOrRd", auto.palette.mapping = TRUE, 
  title = "Bristol Population", 
  breaks = c(0,5,10,15,20,25), colorNA = "darkgrey") + tm_borders("grey25",alpha = 0.7, lwd = 0.1) +
  tm_dots("Informal_Offices", size=0.1,col="green", shapeNA = NA, title = "Informal Offices") + 
  tm_shape(bristol) + tm_dots("Commercial_Offices", size=0.1,col="white",shapeNA=NA, title="Commercial Offices") + 
  tm_legend(text.size=1,title.size=1.2,position=c("left","top")) + 
  tm_layout(legend.outside = TRUE, legend.outside.position = "bottom", title.snap.to.legend = TRUE)

Result

答案 1 :(得分:0)

所以bristol是一个多边形形状(SpatialPolygonDataFramesf),你想在一些多边形中绘制点?

通常情况下,您会有一个变量Offices,其中包含两个级别"Informal""Commercial"。那就是tm_dots(size = 0.1, col = "Offices")。如果您想在一个多边形中放置两个点,因为有非正式和商业办公室,那么您可以使用自己的方法(并对一个组使用xmod和/或ymod以防止重叠),或者创建一个包含所有办公室的SpatialPointsDataFramesf对象,以及一个如上所述的两个级别的变量Offices