网格中地图的灵活布局设置

问题描述

我需要将不同地理范围的地图导出为不同大小的 png 文件(用于网页显示、打印等)。这要求我的地图绘制功能具有高度的灵活性,而我只是无法让所有参数都对齐。几年前就开始用lattice写函数了,已经很精细了,目前还没有使用ggplot2的经验。所以我更愿意暂时留在格子里。

我的问题是:

  • 我不想要绘图区域周围的空白区域,但想要填充整个 png 的地图。除底部外,应绘制水平颜色键。我试过 par.settings。这显然行不通。例如,给 layout.heights 的参数单位是什么?
  • 要绘制的地图的地理范围不同(全国地图和州地图),因此地图宽度和高度的关系(方面)也不同。我想让png宽度(宽度)可以确定为一定数量的像素,例如600 像素或 1200 像素。 png 高度(高度)应相应地进行调整。但是,在定义高度时,如何考虑为底部颜色键保留的空间?我不知道要添加的像素数。
  • 所有这些都会干扰线条、点和文本的大小。使它们随着 png 宽度的增加而增加的直接方法是什么?我想在调用 png 设备时在宽度、分辨率和点大小的干扰处理中找到干净的方法。

我希望我设法使问题变得清晰(代码示例可能会有所帮助),并且非常感谢各位专家的任何提示。谢谢。

干杯, 约翰

# Argument
width <- 600 # PNG width in px

require(lattice)
# Load field
field <- volcano
west <- 1
east <- ncol(field)
south <- 1
north <- nrow(field)

# Color key
breaks <- pretty(field)
cols <- terrain.colors(length(breaks) - 1)
colorkey <- list(space="bottom",col=cols)

# Layout settings
par.settings <- list(layout.heights=list(top.padding=0,main.key.padding=0,key.axis.padding=0,xlab.key.padding=0,key.sub.padding=0,bottom.padding=3),layout.widths=list(left.padding=0,key.ylab.padding=0,ylab.axis.padding=0,axis.key.padding=0,right.padding=0))

# Panel function
panel <- function(...){
  panel.levelplot(...)
  panel.xyplot(x=c(10,20,30),y=c(10,pch=1)
  panel.text(east,south,labels="\u00a9 by me",adj=c(1,0))
}

# Adaptive resolution?
res <- round(width / 9)
# Adaptive pointsize?
# PNG height wrt PNG width plus space for colorkey?
aspect <- nrow(field) / ncol(field)
height <- round(width * aspect)

# Open PNG device
png(filename="test.png",width=width,height=height,units="px",res=res,type="cairo")

# Draw map
print(levelplot(x=field,row.values=seq(south,north),column.values=seq(west,east),at=breaks,col.regions=cols,scales=list(draw=F),colorkey=colorkey,xlab="",xlim=c(west,ylab="",ylim=c(south,panel=panel,par.settings=par.settings))

# Close png device
dev.off()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...