使用knitr :: include_graphics函数控制数字的位置

时间:2016-12-02 12:40:05

标签: r knitr r-markdown

我在*.Rmd文件中使用以下代码生成以下输出:

```{r gb, echo=F, eval=T, results='asis', cache.rebuild=T, fig.cap='bla', out.width='0.7\\linewidth', fig.subcap=c('bla.', 'Using the \\textit{normalizeChIPToInput} function. THis method doesn not require to compute a enrichment ratio.')}
p1 <- file.path(FIGDIR, 'correlK27K9me3.png')
p2 <- file.path(FIGDIR, 'correlK27K9me3.png')
knitr::include_graphics(c(p1,p2))
```

enter image description here

我想垂直堆叠这两个图而不是并排显示它们而没有单独调用include_graphics(这不适用于子标题)而不必放置它们进入单独的chuncks。如果不操纵乳胶代码,这可能吗?

更一般地说,是否有可能以某种方式指定上述方式中包含的绘图的布局,例如:'为我提供给include_graphics函数的4个图像给我一个2x2的网格?

2 个答案:

答案 0 :(得分:1)

而不是:

knitr::include_graphics(c(p1,p2))

这个怎么样:

cowplot::plot_grid(p1, p2, labels = "AUTO", ncol = 1, align = 'v')

这可以在{r}内部使用,但我不知道如果你的chunk config / setup会如何工作。

答案 1 :(得分:1)

这不是问题最巧妙的解决方案,而是使用R中的gridarrangetext函数进行一些解决方法。

处理流程:read_images - &gt;转换为网格 - &gt;读取网格图像 - &gt; add_text - &gt; final_save

```{r fig.align='center', echo=FALSE, fig.cap="Figure 1 : foo", warning=FALSE, message=FALSE}
library(png)
library(grid)
library(gridExtra)

#Loading images
img0 <- readPNG("heatMap.png")
img1 <- readPNG("heatMap.png")
img2 <- readPNG("heatMap.png")
img3 <- readPNG("heatMap.png")

#Convert images to Grob (graphical objects)
grob0 <- rasterGrob(img0)
grob1 <- rasterGrob(img1)
grob2 <- rasterGrob(img2)
grob3 <- rasterGrob(img3)

png(filename = "gridPlot.png", width = 1200, height = 716)

grid.arrange(grob0, grob1, grob2, grob3, nrow = 2)

invisible(dev.off())

gridplot.0 <- readPNG("gridPlot.png")
h<-dim(gridplot.0)[1]
w<-dim(gridplot.0)[2]

png(filename = "gridPlotFinal.png", width = 1200, height = 716)

#adding text to image (refer to https://stackoverflow.com/a/23816416/6779509)

par(mar=c(0,0,0,0), xpd=NA, mgp=c(0,0,0), oma=c(0,0,0,0), ann=F)
plot.new()
plot.window(0:1, 0:1)

#fill plot with image
usr<-par("usr")    
rasterImage(gridplot.0, usr[1], usr[3], usr[2], usr[4])

#add text
text("plot1", x=0.25, y=0.50)
text("plot2", x=0.75, y=0.50)
text("plot3", x=0.23, y=0.0)
text("plot4", x=0.77, y=0.0)

invisible(dev.off())

gridplot <- file.path("gridPlotFinal.png")
knitr::include_graphics(gridplot)
```

输出 plot