问题描述
我需要将不同地理范围的地图导出为不同大小的 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 (将#修改为@)