【问题标题】:Adding a background image to a levelplot将背景图像添加到 levelplot
【发布时间】:2013-11-18 17:51:18
【问题描述】:

我想做一个有背景图片的levelplot。以下代码提示错误消息Error in rasterImage(image, x[1], y[1], x[length(x)], y[length(y)]) : plot.new has not been called yet - 显然rasterImage 无法将打印的levelplot 对象识别为绘图。什么是合适的方法而不是rasterImage

library("png")
library("lattice")
library("latticeExtra")

MyFunction <- function(x,y){
  return(
    dnorm(sqrt(x^2+y^2))
    )
}

meshstep <- 0.2
x<- seq(-20,20,meshstep)
y <-seq(-20,20,meshstep)

image <- readPNG("imagepath\\image.png")

grid <- expand.grid(x=x, y=y)

grid$z<- MyFunction(grid$x,grid$y)

MyPalette <- colorRampPalette(c('white','yellow', 'red'))

levels <- 10
p<- levelplot(z~x*y, grid, cuts = levels, xlab="",
          ylab="",
          colorkey = TRUE, region = TRUE,col.regions=MyPalette(levels+1),
alpha.regions=0.3)


plot(p)
rasterImage(image, x[1], y[1],x[length(x)],y[length(y)])

【问题讨论】:

  • 您正在尝试混合两种不同的绘图范例。坐标系将需要匹配。有关所需的背景信息,请参阅包“gridBase”和“latticeExtra”中的文档。

标签: r lattice levelplot


【解决方案1】:

+.trellislayergrid.raster 结合使用:

library(grid)
library(latticeExtra)
library(png)

image <- readPNG(system.file("img", "Rlogo.png", package="png"))

p + layer(grid.raster(as.raster(image)), under=TRUE) 

【讨论】:

  • 运行此代码时,我没有收到任何错误,但只是一个具有低 alpha 的levelplot,并且该图没有我想要的背景图像。为什么会这样?
  • 我已经修复了代码。再试一次。无论如何,如果没有可重复的示例,很难知道您的结果是什么。
  • 感谢您的编辑。不幸的是,即使在我添加了 x、y、宽度和高度值(即使用layer(grid.raster(as.raster(image)), x[1], y[1],x[length(x)],y[length(y)], under=TRUE) )之后,我也无法使上述代码正常工作,我收到一条关于内存不足的错误消息。我选择用不同的方法来解决这个问题,即使用精心挑选的 png 来获取实际地图。以下线程提供了有价值的信息:r-sig-geo.2731867.n2.nabble.com/… 谢谢!
  • 好的,但请注意括号的位置有误,grid.raster 的参数与rasterImage 不同。应该是layer(grid.raster(as.raster(image), x=myX, y=myY, width=myWidth, height=myWidth), under=TRUE)
  • 感谢您指出这一点。它可能是也可能不是一些错误的根源——我没有从实际文件中粘贴代码 sn-p,而是试图重建我所做的事情。无论如何,在最近的第二次编译尝试中,我设法让你的答案正常工作,但我没有用我的特定图像尝试它,因为我的替代方法已经产生了更好的结果。
猜你喜欢
  • 2015-11-06
  • 2012-04-09
  • 2011-06-01
  • 2017-01-14
  • 2013-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多