是否可以在一张png图像中并排获得具有相同高度的这两个地图?如下图所示,应以最小但适当的空间分隔两个图像。我接受其他解决方案,尤其是ggmap.
我尝试了par(mar=...
(还有mai
)来减小边距大小,但这似乎并没有影响两个地图之间的大小或空间。我还在第二个par()函数(用于状态)中使用了cex = 1.8
,该函数使两个地图的高度相似,但它们之间的距离更远。
将文件另存为PDF时,每张地图都放在单独的页面上。当我尝试png时,我只会得到密苏里州的地图。
MWE:
library(maps)
op <- par(mfrow=c(1,2))
png(file = "maps.png", width = 1000, height = 400)
par(mar=c(0,0,0,0))
map('state')
map('state', 'missouri', add = TRUE, fill = TRUE)
map('state', c('mississippi', 'alabama', 'north carolina', 'florida'), add = TRUE, fill = TRUE, col = "gray")
par(mar=c(0,0,0,0))
map('county', 'missouri')
map('county', 'missouri,scott', add=TRUE, fill=TRUE)
dev.off()
par(op)
答案 0 :(得分:1)
par
选项当时特定于活动的“图形设备”。演示:
从“普通”(非文件)图形开始尝试。
par(mfrow=1:2)
par('mfrow')
# [1] 1 2
png("maps.png")
par('mfrow')
# [1] 1 1
dev.off()
# windows
# 2
par('mfrow')
# [1] 1 2
我没有关闭先前的纯图形窗口,所以一旦我关闭png
设备,先前活动的窗口就会再次变为活动状态。而且它仍在思考mfrow=1:2
。
所以我认为您的答案是这样,唯一的变化是png
,par(mfrow=1:2)
的顺序。
png(file = "maps.png", width = 1000, height = 400)
op <- par(mfrow=c(1,2))
par(mar=c(0,0,0,0))
map('state')
map('state', 'missouri', add = TRUE, fill = TRUE)
map('state', c('mississippi', 'alabama', 'north carolina', 'florida'), add = TRUE, fill = TRUE, col = "gray")
par(mar=c(0,0,0,0))
map('county', 'missouri')
map('county', 'missouri,scott', add=TRUE, fill=TRUE)
dev.off()
par(op)
答案 1 :(得分:0)
受@Andres评论的启发,我开发了一个ggplot2
版本,该版本使用patchwork.
并排放置两个地图,我发现使用geom_polygon
而不是转换地图更容易sf
个对象。
library(maptools)
library(ggplot2)
library(ggthemes) # for Tufte theme
library(patchwork)
# remove the unneeded ink not removed by
# theme_tufte()
theme_tufte_empty <- function(){
theme(axis.title = element_blank(),
axis.text = element_blank(),
axis.ticks.length = unit(0, "cm"))
}
usa <- map_data("state")
us_missouri <- map_data('state','missouri') #do similar for other states
us_map <- ggplot() +
geom_polygon(data = usa, aes(x=long, y = lat, group = group), fill = NA, color = "black") +
geom_polygon(data = us_missouri, aes(x = long, y = lat, group = group), fill = "black") +
theme_tufte() + # quickly remove most ink
theme_tufte_empty() +
coord_fixed(1.3)
missouri <- map_data("county", "missouri")
mo_scott <- map_data("county", "missouri,scott")
mo_map <- ggplot() +
geom_polygon(data = missouri, aes(x=long, y = lat, group = group), fill = NA, color = "black") +
geom_polygon(data = mo_scott, aes(x = long, y = lat, group = group), fill = "black") +
theme_tufte() +
theme_tufte_empty() +
coord_fixed(1.3)
us_map + mo_map + plot_layout(ncol = 2, widths = c(1.5,1))