【问题标题】:several ggplot2 plots on top on an image图像顶部的几个 ggplot2 图
【发布时间】:2014-11-17 10:02:53
【问题描述】:

我有这个基于 ggplot2 的自定义绘图函数

我现在想做的是放置几个用这个绘制的图 背景图像顶部的函数(以 png 格式加载)。

我不想将图放置在常规网格上,而是 在图像上的选定位置。

(可以在 http://www.climatechange2013.org/images/figures/WGI_AR5_Fig10-21.jpg)

在我看来,我需要在不同的环境中绘制每个图,以及将这些环境放置在图像上选定坐标处的方法。

谁能指导我找到正确的包/教程/博客/等 对这个有用吗?

真诚地, 哈多尔

【问题讨论】:

  • 像这样的过于笼统的问题在 SO 中被认为是题外话,尤其是因为它要求提供包记录和教程。也许其他 stackexchange 场所之一的规则会不那么严格。为什么不在 GIS 论坛上查看条款?

标签: r ggplot2 lattice


【解决方案1】:

通过 ggplot 查看 Embedded Plots: http://vita.had.co.nz/papers/embedded-plots.pdfggsubplot-Packages。

或者通过-ggplot2::annotation_raster“手动”完成。
拍摄这张照片:http://pixabay.com/static/uploads/photo/2012/04/16/12/34/squares-35798_640.png

require(ggplot2)
require(png)
library(RCurl)
myurl <- "http://pixabay.com/static/uploads/photo/2012/04/16/12/34/squares-35798_640.png"
mypng <-  readPNG(getURLContent(myurl))

df <- data.frame(x = rnorm(10), y = rnorm(10))

ggplot(df, aes(x=x,y=y)) + 
  annotation_raster(mypng, xmin=min(df$x), xmax = max(df$x), ymin=min(df$y), ymax=max(df$y)) + 
  geom_point()

现在你可以添加任何你想要的层geom_...。可能你需要相应地修改xmin, xmax, ymin, ymax

【讨论】:

  • 如果我没记错的话,那是图像上的情节,而不是图像上的情节
  • 谢谢。我的问题可能可以通过嵌入式绘图来解决。感谢您的链接。
  • @baptiste 它取决于 ggplot-commands 的顺序(即添加层的顺序)。如果您在annotation_raster 之前调用geom_point,则图像将绘制在点上方,否则将点绘制在图像上方。
【解决方案2】:

在这里使用一个示例image 一种方法:

library(png)
ima <- readPNG("C:/Users/MyPC/Desktop/rus.png")
png <- "C:/Users/MyPC/Desktop/rus.png"
ima <- readPNG(png)
library(ggplot2)

tm <- theme(
    panel.background = element_rect(fill = "transparent",colour = "black"), # or theme_blank()
    panel.grid.minor = element_blank(), 
    panel.grid.major = element_blank(),
    plot.background = element_rect(fill = "transparent",colour = NA)
)

plot.new()
lim <- par()
rasterImage(ima, lim$usr[1], lim$usr[3], lim$usr[2], lim$usr[4])

library(grid)
vp <- viewport(.25, 0.65, width =.3, height = .3)
pl <- ggplot(mtcars, aes(x = mpg)) + geom_histogram() + tm
print(pl, vp = vp)

pl2 <- ggplot(mtcars, aes(x = mpg, y = wt)) + geom_line() + tm
vp2 <- viewport(.75, 0.65, width =.3, height = .3)
print(pl2, vp = vp2)

pl3 <- ggplot(mtcars, aes(x = mpg, y = wt)) + geom_line() + tm
vp3 <- viewport(.5, 0.4, width =.3, height = .3)
print(pl3, vp = vp3)

【讨论】:

  • annotation_custom(ggplotGrob(p))
  • 谢谢,好像是这个!
  • 使用grid.raster 代替rasterImage 可能更有意义;通常最好避免混合基础图形和网格图形。
猜你喜欢
  • 1970-01-01
  • 2017-07-17
  • 1970-01-01
  • 1970-01-01
  • 2022-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多