例:
我想并排绘制两个tmap图,这些图是由此代码生成的。
library(tmap)
library(gridExtra)
data(World)
plot1=
tm_shape(World, projection = "merc") +
tm_layout("", inner.margins=c(-1.72, -2.05, -0.75, -1.56)) +
tm_borders(alpha = 0.3, lwd=2)
plot2=
tm_shape(World, projection = "merc") +
tm_layout("", inner.margins=c(-1.72, -2.05, -0.75, -1.56)) +
tm_borders(alpha = 0.3, lwd=2)
Run Code Online (Sandbox Code Playgroud)
问题:
我在将两个图并排放置时遇到问题。我试过了:
grid.arrange(plot1, plot2)通过一个错误Error in arrangeGrob(..., as.table = as.table, clip = clip, main = main, : input must be grob!。我认为这应该可行(使用gridExtra),因为tmap似乎基于grid graphics system。
也par(mfrow=c(1,2))不起作用,因为它仅显示一个图(猜想这是相关的,因为tmap图不遵循base …
我正在尝试撰写有关我的计划的报告,并使用RMarkdown展示我的工作.但是,我当前使用的地图是由tmap包生成的.
shapefile可以在这里下载
我使用R进行交互的方式是
library(tmap)
library(rgdal)
map <- readOGR("Malaysia SHP", "MYS_adm1")
tmap_mode("view")
tm_shape(map) + tm_polygons()
Run Code Online (Sandbox Code Playgroud)
这将生成一个我们可以直接从R访问的交互式地图.
我希望将其包含在我的RMarkdown中并仍然使其具有交互性.我知道有一个名为的包leaflet通常用于创建交互式地图.有没有办法tmap在RMarkdown中使用而不使用leaflet?来创建交互式地图?
任何帮助将不胜感激.谢谢!
我一直在尝试将一列数值数据从数据帧添加到SpatialPolygon数据帧,但每次尝试都会导致后者被转换为类似于前者的标准数据帧。我需要添加该列,以便我可以创建一个以该列的变量为焦点的等值线图。显然,标准数据框不好,因为我正在尝试使用tmap.
这就是我一直在尝试添加列的方式(shapefilecomb空间数据框在哪里,wardturnout是包含相关列的变量):
shapefilecomb <- c(wardturnout)
Run Code Online (Sandbox Code Playgroud) 我正在使用 R 版本 3.4.2 的 Ubuntu 16.04。
我想安装 R-Package“protolite”(更准确地说,我想安装“tmap”,其中 protolite 是先决条件)。我安装了 libprotocol 版本 2.6.1:
$ protoc --version
Run Code Online (Sandbox Code Playgroud)
返回 libprotoc 2.6.1。
当我输入 install.packages "protolite" 时,R 给了我警告:
Package protobuf was not found in the pkg-config search path.
Perhaps you should add the directory containing 'protobuf.pc'
to the PKG_CONFIG_PATH environment variable
No package 'protobuf' found
Run Code Online (Sandbox Code Playgroud)
后来安装失败
/usr/bin/ld: cannot find -lprotobuf
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
由于安装了 libprotocoll,我通过以下方式搜索了 pc 文件
apt-file search protobuf.pc
Run Code Online (Sandbox Code Playgroud)
哪个返回
libprotobuf-dev: /usr/lib/x86_64-linux-gnu/pkgconfig/protobuf.pc
Run Code Online (Sandbox Code Playgroud)
所以我加了
export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig
Run Code Online (Sandbox Code Playgroud)
然而,这并没有解决问题。有人可以帮我吗?
注意:我现在花了几个小时尝试安装“tmap”,起初我的问题是我安装了 libprotocol …
我已经使用tmap和底图在R中创建了一个地图,并希望将其另存为图像。
每当我使用tmap_save将其另存为.png时,都会丢失底图。
大概是因为底图在绘图模式下不可见,而仅在视图模式下可见。
是否有一种很好的方法将带有底图的地图另存为图像?
我有一个解决方法,涉及先将其保存为HTML,但这不是一个很好的解决方案。
我正在尝试在 tmap 图中添加一些文本标签。
library(tmap)
library(raster)
jnk <- getData("GADM",country="IND",level=2)
map_file <- tm_shape(jnk) +
tm_polygons() +
tm_text("NAME_1", remove.overlap = TRUE)
Run Code Online (Sandbox Code Playgroud)
我的问题是我在绘图时收到重复的文本(因为我是新手,所以无法发布图像)。我想我可能需要按某种几何形状和 NAME_1 组合进行分组,但我不确定从哪里开始。
任何建议都会很棒!
我有一个简单的问题:如何在 R 中删除 tmap 中自动添加的图例?
在这种情况下,我想删除右侧的图例,描绘“级别”。
这是我尝试过的:
tm_shape(densities$polygons)+
tm_polygons(col='level', palette='Reds', alpha=0.5, border.col = 'transparent') +
tm_legend(show=FALSE)
Run Code Online (Sandbox Code Playgroud)
我也试过:
tm_shape(densities$polygons)+
tm_polygons(col='level', palette='Reds', alpha=0.5, border.col = 'transparent') +
tm_layout(legend.show=FALSE)
Run Code Online (Sandbox Code Playgroud)
不知道为什么,但这些都没有删除图例。希望有任何解决方案,谢谢!
我有一个使用库生成的拥挤地图,我已经使用函数中的tmap参数关闭了图例。legend.show = FALSEtm_layout()
我想知道的是:有没有办法自己为这张地图生成图例?这样它就可以成为一个独立的图像?
(很抱歉,代码不会为您提供地图)
tm_borders()+
tm_shape(parks)+
tm_polygons()+
tm_shape(houses)+
tm_polygons()+
tm_shape(grid)+
tm_polygons(col="n", style ="cont", palette="plasma",alpha = 0.5)+
tm_layout(legend.show=FALSE)
Run Code Online (Sandbox Code Playgroud)
编辑:
是的。它在帮助文件中,它是:函数legend.only = TRUE中的参数tm_layout()。
tm_borders()+
tm_shape(parks)+
tm_polygons()+
tm_shape(houses)+
tm_polygons()+
tm_shape(grid)+
tm_polygons(col="n", style ="cont", palette="plasma",alpha = 0.5)+
tm_layout(legend.only= T)
Run Code Online (Sandbox Code Playgroud) 我正在使用该tmap包绘制多个多边形的边界。以下代码是一个基本示例。
library(sf)
library(tmap)
nc <- st_read(system.file("shape/nc.shp", package = "sf"))
tm_shape(nc) +
tm_borders()
Run Code Online (Sandbox Code Playgroud)
这看起来不错。但是,如果我更改边界线的样式,则多边形之间的边界看起来与轮廓不同。下面是一个例子。我将线型更改为虚线。一些线段看起来是实心的或有很多点。
tm_shape(nc) +
tm_borders(lwd = 1, lty = "dotted")
Run Code Online (Sandbox Code Playgroud)
这是另一个例子。我将线宽更改为2,透明度更改为0.6。我们可以看到许多内部边界看起来比轮廓更强大。
tm_shape(nc) +
tm_borders(lwd = 2, alpha = 0.6)
Run Code Online (Sandbox Code Playgroud)
我想了解为什么会发生这种情况,以及如何使所有边界和轮廓的线条样式通用。我将不胜感激任何提示或想法。
更新:其他绘图选项
在这里,我尝试了其他选项来模拟带有虚线边界的地图。该geom_sf和ggspatial可以产生非常相似点划线边界的情节。但是,如果我更改了sf对象并使用base R或spplot从sp包中绘制它,问题仍然存在。
geom_sf
library(ggplot2)
library(sf)
nc <- st_read(system.file("shape/nc.shp", package = "sf"))
ggplot() +
geom_sf(data = nc, linetype = "dotted", fill = "white") +
theme_bw() +
theme(panel.grid = element_blank(),
axis.text = …Run Code Online (Sandbox Code Playgroud) 我发现加载一些包会影响R中的随机数生成,问题可以复现如下。
(1) 打开一个新的 R 会话。(我的情况:R 4.x + RStudio)
(2) 执行以下代码:
set.seed(1)
library(sf)
library(tmap)
sample(1:10, 5)
Run Code Online (Sandbox Code Playgroud)
(3) 第一次的结果是:5 10 2 8 6
(4) 但是,如果多次执行整个代码,结果(第一次之后)总是: 9 4 7 1 2
为什么第一次的结果不一样?看来第一次加载sf和tmap库会影响随机数的生成。这么奇怪。
r ×10
tmap ×10
gis ×2
r-sf ×2
choropleth ×1
geography ×1
graphics ×1
mapping ×1
maps ×1
statistics ×1