2016-12-02 13 views
11

tôi sử dụng đoạn mã sau vào tập tin *.Rmd của tôi để tạo đầu ra dưới đây:Kiểm soát vị trí của các nhân vật với knitr :: include_graphics chức năng

```{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

Tôi muốn theo chiều dọc chồng hai ô thay vì hiển thị chúng cạnh nhau mà không có các cuộc gọi riêng biệt đến include_graphics (không hoạt động với phụ đề) và không phải đặt chúng vào các chuncks riêng biệt. Điều này có thể thực hiện được nếu không thao tác mã latex?

Nói chung, có thể bằng cách nào đó chỉ định bố cục cho các ô được bao gồm theo cách trên, như: 'Cho tôi một mạng lưới 2x2 cho 4 hình ảnh mà tôi cung cấp cho hàm include_graphics?

+0

Nếu @Yihui doesn 't có một câu trả lời, tôi nghi ngờ nó dễ dàng/có thể. Một biến chứng là bố cục được đề xuất này không dễ dàng di chuyển trên tất cả các định dạng mà 'knitr' hỗ trợ. Vì bạn đang cạnh tranh cho đầu ra pdf, có lẽ bạn có thể sử dụng mã 'LaTeX' trong tệp Rmd ​​để làm những gì bạn muốn. – r2evans

+0

Tôi không thể sao chép ví dụ của bạn. Bạn có thể cung cấp tệp png của bạn và tiêu đề YAML không? –

+0

bạn có nghĩ đến việc đặt mã HTML trực tiếp vào tài liệu để xử lý việc này không? Giả sử, tất nhiên, bạn đang biên dịch sang HTML. – user5359531

Trả lời

1

Thay vì:

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

gì về điều này:

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

này sẽ làm việc bên trong {r}, nhưng tôi không chắc chắn làm thế nào nó sẽ làm việc cho đoạn bạn config/setup.

1

Đây không phải là giải pháp gọn gàng hầu hết các vấn đề nhưng một chút workaround sử dụng gridarrangetext chức năng trong R.

Process luồng: read_images -> chuyển thành lưới -> đọc hình ảnh lưới -> add_text - > 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) 
``` 

Output: plot

Các vấn đề liên quan