我正在尝试创建一系列地图组成的动画。在这个动画的一个阶段,我需要保持地图的左端,并且只能将其向右延伸。为此,我保持xlim
下限固定并仅更改xlim
上限。
library(rworldmap)
worldMap <- getMap(resolution = "high")
fixedLatitude <- c(36.76, 38.76)
# Fixed lower limit of the X axis
fixedMinLongitude <- 20.64
# Varying the upper limit of the X axis
maxLongitudes <- seq(22.64, 22.78498, length.out = 4)
longitudes <- lapply(maxLongitudes, function(x) c(fixedMinLongitude, x))
countMaps <- 1
for (ln in longitudes){
png(paste("test", countMaps, ".png", sep = ""))
mapCountryData(worldMap,
xlim = ln,
ylim = fixedLatitude,
addLegend = F, mapTitle = "")
dev.off()
countMaps <- countMaps + 1
}
我预计地图左边的区域在四个数字中不会改变。也就是说,这些轮廓不会从地图上切掉。但是result I got was this。
在这些序列中,可以看到左侧岛屿的边缘正在改变,因为地图向右“行走”,而不仅仅是按我预期的那样向右倾斜。
我哪里错了?
library(rworldmap)
worldMap <- getMap(resolution = "high")
fixedLatitude <- c(36.76, 38.76)
# Fixed lower limit of the X axis
fixedMinLongitude <- 20.64
# Varying the upper limit of the X axis
maxLongitudes <- seq(22, 25, length.out = 4)
longitudes <- lapply(maxLongitudes, function(x) c(fixedMinLongitude, x))
proportionLeftSpace <- seq(0,0, length.out = 4)
countMaps <- 1
for (ln in longitudes){
png(paste("test", countMaps, ".png", sep = ""))
mapCountryData(worldMap,
xlim = ln,
ylim = fixedLatitude,
addLegend = F, mapTitle = "")
abline(v = ln)
plotRegionMinX <- par("usr")[1]
spaceBeforeXlim <- ln[1] - plotRegionMinX
onePercentXAxis <- diff(ln)/100
proportionLeftSpace[countMaps] <- spaceBeforeXlim/onePercentXAxis
dev.off()
countMaps <- countMaps + 1
}
proportionLeftSpace
在这个例子中,第一个和第二个地图之间的过渡有我提到的问题,但是,其他地图之间的过渡是我想要的。
根据安迪的建议,我添加了垂直线条。这表明第一张地图中xlim
的下限与“情节区域”之间的距离更大。为了证实这一点,我添加了proportionLeftSpace
变量,用于存储底部xlim
之前剩余空间的百分比。结果是:
39.28339 4.00000 4.00000 4.00000
因此,第一张地图中xlim
之前的空间比其他地图高10倍。
答案 0 :(得分:0)
@celacanto太棒了!感谢问题的澄清,并帮助我准确理解R&amp;因此rworldmap
处理绘图范围。
您问题的简短回答:
在第一个图中左侧xlim
和左侧图边界之间存在较大的间隙,因为ylim
相对于xlim
较大,因此确定了图的比例。如下图所示,ylim
确定了上面两个图中的比例,xlim
确定了下面2个图中的比例。
解决方案是使ylim
相对于xlim
更小,如下面的代码所示,这应该意味着左图边框不会像在此图中那样移动:
library(rworldmap)
#worldMap <- getMap(resolution = "high")
#this makes it quicker & illustrates the same thing
worldMap <- getMap(resolution="low")
#fixedLatitude <- c(36.76, 38.76)
#making the latitudinal difference smaller
#so that the longitudinal difference always determines map scale
fixedLatitude <- c(36.76, 37.76)
# Fixed lower limit of the X axis
fixedMinLongitude <- 20.64
# Varying the upper limit of the X axis
maxLongitudes <- seq(22, 25, length.out = 4)
longitudes <- lapply(maxLongitudes, function(x) c(fixedMinLongitude, x))
#create blank object to store left space
proportionLeftSpace <- seq(0,0, length.out = 4)
#alternative to put all 4 plots together on windows, comment out png & dev.off
#windows()
#op <- par(mfrow = c(2, 2))
countMaps <- 1
for (ln in longitudes){
png(paste("xlimtest", countMaps, ".png", sep = ""))
mapCountryData(worldMap,
xlim = ln,
ylim = fixedLatitude,
addLegend = F, mapTitle = "")
abline(v=ln)
abline(h=fixedLatitude)
#from celacanto
plotRegionMinX <- par("usr")[1]
spaceBeforeXlim <- ln[1] - plotRegionMinX
onePercentXAxis <- diff(ln)/100
proportionLeftSpace[countMaps] <- spaceBeforeXlim/onePercentXAxis
dev.off()
countMaps <- countMaps + 1
}
proportionLeftSpace
在此示例中,proportionLeftSpace
以常量4,4,4,4形式出现,这是R的默认设置。
希望有所帮助,祝你好运!