2017-07-06 2 views
4

Ceci est probablement une question fondamentale, mais je ne suis pas familier avec les images dans R.Joignez-vous à des images avec des trames de données en r

Je veux un fichier PDF avec deux joints images importées et une trame de données comme l'image illustre:

Final output

Voici le code que j'utilise mais ne fonctionne pas.

library(grid) 
library(useful) 
library(magick) 

# Read external images 
imageA <- image_read("imageA.jpg") 
imageB <- image_read("imageB.jpg") 

# Create data frame 
df <- data.frame(1:3) 

# Create PDF 
pdf("/Mydocument.pdf", width = 10, height = 20) 
grid.newpage() 

# Create matrix layout 
pushViewport(viewport(layout = grid.layout(1, 3))) 

# Place elements inside grid 
print(imageA, vp = vplayout(1, 1)) 
print(imageB, vp = vplayout(1, 2)) 
print(df, vp = vplayout(1, 3)) 

dev.off() 

Répondre

0

Ce code réalise ce que vous voulez:

require('magick') 

# Read external images 
frink = image_read("https://jeroen.github.io/images/frink.png") 
logo = image_read("https://www.r-project.org/logo/Rlogo.png") 
imgs = c(frink, logo) 

# concatenate them left-to-right (use 'stack=T' to do it top-to-bottom) 
side_by_side = image_append(imgs, stack=F) 

# save the pdf 
image_write(side_by_side, path = "just_a_test.pdf", format = "pdf") 

qui donne cette image:

enter image description here

Vous voudrez peut-être à l'échelle les images verticalement avec image_scale(imgs, "x960") - changer 960 avec ce la hauteur que vous voulez, en pixels.

Le vignette of magick explique cela et bien plus: il est une ressource extrêmement précieux pour travailler sur les images avec R.


Une note: si vous utilisez R dans le seul but de concaténer les images, vous êtes le faire mal: utilisez directement la syntaxe convert img1.png img2.gif +append new_combined.pdf de l'outil de ligne de commande convert. Il est livré avec la bibliothèque Image Magick, le package R magick est un wrapper.

Mais si vous avez d'autres traitements à faire avec R, vous pouvez simplement convertir l'image en tant que raster et continuer à travailler avec elle: as.raster(side_by_side)

+0

J'aprreciate beaucoup de votre aide. Je fais des traitements avec R. Je veux mettre un cadre de données de côté les images. Comment suggérez-vous que je doive procéder? –

+0

@Alfredo_MF 'require ('raster'); your_raster = as.raster (side_by_side); 'serait le chemin à parcourir. Les images sont généralement stockées sous forme de raster dans R, c'est un moyen très pratique de les manipuler (par exemple, 'plot (your_raster)' fonctionne). Je ne vois pas pourquoi vous auriez besoin d'un data.frame stockant des codes RVB pour chaque pixel, mais vous pouvez toujours l'obtenir comme ça: 'as.data.frame (as.matrix (your_raster))' :) – Jealie