我们如何在R中的给定坐标处绘制图像?

时间:2013-10-07 21:06:37

标签: r image plot scatter-plot cran

给出png / jpeg格式的'n'图像和2维(x,y)的'n'对应坐标:我想在单个图上的给定坐标处绘制这些图像。如果我发现图像太大,我最好将它们绘制为给定坐标处的较小/缩放版本。我怎样才能在R中实现这样的情节?

下面给出了这样一个情节的示例:

enter image description here

3 个答案:

答案 0 :(得分:6)

xy <- data.frame(x=runif(10, 0, 100), y=runif(10, 0, 100))

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

thumbnails <- function(x, y, images, width = 0.1*diff(range(x)), 
                       height = 0.1*diff(range(y))){

  images <- replicate(length(x), images, simplify=FALSE)
  stopifnot(length(x) == length(y))

  for (ii in seq_along(x)){
    rasterImage(images[[ii]], xleft=x[ii] - 0.5*width,
                ybottom= y[ii] - 0.5*height,
                xright=x[ii] + 0.5*width, 
                ytop= y[ii] + 0.5*height, interpolate=FALSE)
  }
}

plot(xy, t="n")
thumbnails(xy[,1], xy[,2], img)

enter image description here

答案 1 :(得分:4)

my.symbols函数和ms.image函数(均来自TeachingDemos软件包)可用于绘制图像。

以下是一个例子:

library(png)

flag.list <- lapply( list.files('flags/',pattern='png$', full=TRUE), 
    function(x) readPNG(x) )

library(TeachingDemos)

ms.flags <- function(ind,...) {

    tmp <- array(0, dim=c(150,150,4) )
    tmp[ 26:125, , 1:3] <- flag.list[[ind]]
    tmp[ 26:125, , 4 ] <- 1

    ms.image(tmp,...)
}

x <- rnorm(50)
y <- rnorm(50)

my.symbols(x,y, symb = ms.flags, ind=1:50, symb.plots=TRUE,
  add=FALSE, xlim=c(-3,3), ylim=c(-3,3), inches=0.75)

enter image description here

答案 2 :(得分:2)

ggflags package提供了一个原理验证示例

library(ggflags)
set.seed(1234)
d <- data.frame(x=rnorm(50), y=rnorm(50), 
                country=sample(c("ar","fr", "nz", "gb", "es", "ca"), 50, TRUE), 
                stringsAsFactors = FALSE)
ggplot(d, aes(x=x, y=y, country=country, size=x)) + 
  geom_flag() + 
  scale_country()