2014-11-17 105 views
0

我已經基於GGPLOT2幾個GGPLOT2地塊的圖像

這個漂亮的自定義繪圖功能我現在想要做的,是把與背景圖像的頂部這 功能(畫幾個圖作爲png加載)。

我不想將圖放置在一個規則的網格上,而是在圖像上的選定位置上放置 。

在我看來,我需要讓每一個獨特的環境中抽出我的陰謀,並把這些環境的方法(這樣的情節的例子可以在 http://www.climatechange2013.org/images/figures/WGI_AR5_Fig10-21.jpg可以看出)在圖像上的選擇座標處。

任何人都可以指導我正確的包/教程/博客/等等, 可以用於這個?

真誠, 哈爾多爾

+0

這樣過於寬泛的問題被認爲是題外話在SO,尤其如此,因爲它要求包裝區域經濟共同體和教程。也許這些規則在其他堆棧交換場地中的規則不那麼嚴格。爲什麼不在GIS論壇上查看條款? –

回答

1

必須通過ggplot看看嵌入式圖: 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

enter image description here

+0

如果我沒有誤認爲是情節中的圖像,而不是圖像上的情節 – baptiste

+0

謝謝。我的問題可能可以通過嵌入式圖解來解決。感謝您的鏈接。 –

+0

@baptiste它取決於ggplot命令的順序(即添加圖層的順序)。如果你在'annotation_raster'之前調用'geom_point',則圖像被繪製在點上方,否則點在圖像上方。 – Daniel

1

使用的示範性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) 

enter image description here

+0

或'annotation_custom(ggplotGrob(p))' – baptiste

+0

謝謝,這好像就是它! –

+0

它可能會更有意義的使用'grid.raster'而不是'rasterImage';通常最好避免混合底座和網格圖形。 – baptiste