2010-09-08 11 views
7

Ho bisogno di tracciare e visualizzare diverse immagini jpeg in un unico display combinato (o tela?). Ad esempio, supponiamo di avere immagini {a, b, c, d} .jpg, ognuna di dimensioni diverse e vorrei tracciarle su una pagina in una griglia 2x2. Sarebbe anche bello poter impostare un titolo per ogni sottotrama.Stampa di più immagini jpeg in un unico display

Sono stato alla ricerca di una soluzione, ma non sono riuscito a scoprire come farlo, quindi qualsiasi idea sarebbe davvero di aiuto. Preferirei utilizzare una soluzione basata sul pacchetto EBImage.

+0

Grazie per le risposte. Il vero problema era la gestione dei dati dell'immagine, con il pacchetto rimage ho ottenuto i dati delle immagini dal pacchetto EBImage per visualizzare meglio. Ho ancora margini terribilmente grandi quando organizzo i grafici con il parametro mfrow(), anche se ho giocato molto con i parametri oma e mar. – user442446

risposta

4

Ci sono due modi per organizzare diversi intrecci con funzioni grafiche di base, vale a dire par(mfrow=c(rows,columns)) (sostituto rows e columns con interi) e layout(mat) dove mat è una matrice come matrix(c(1,2,3,4)).
Per ulteriori informazioni, vedere ?par, ?layout e in particolare Quick-R: Combining Plots.

Tuttavia, poiché la tua domanda riguarda le immagini, non so se ti aiuta affatto. In caso contrario, mi dispiace per aver interpretato male la tua domanda.

2

Per aggiungere alla soluzione Henriks, un modo piuttosto conveniente di utilizzare la funzione pari() è:

jpeg(filename="somefile.jpg") 
op <- par(mfrow=c(2,2) 
#plot the plots you want 
par(op) 
dev.off() 

In questo modo, si mette i parametri di nuovo al vecchio stato dopo è stato eseguito il codice. Essere consapevoli del fatto che questo NON è vero se uno dei grafici ha dato un errore.

Essere consapevoli del fatto che R inserisce sempre i grafici nello stesso ordine. Usando mfrow riempie la griglia riga per riga. Se si utilizza mfcol invece di mfrow nel codice, si riempie colonna per colonna.

Il layout è una storia completamente diversa. Qui puoi definire in quale ordine devono essere piazzate le trame. Quindi layout(matrix(1:4,nrow=2) equivale a par(mfcol=c(2,2)). Ma layout(matrix(c(1,4,3,2),ncol=2)) posiziona il primo grafico a sinistra, il successivo a destra, il terzo a destra e l'ultimo a sinistra.

Ogni trama è completamente indipendente, quindi vengono stampati anche i titoli specificati utilizzando l'opzione main. Se vuoi avere maggiore flessibilità, dovresti dare un'occhiata ai grafici a traliccio.

+0

Questo non funziona con la funzione 'immagine', che sovrascrive la figura intera. – Quantum7

+0

@ Quantum7 L'ho provato con 'image()', e funziona perfettamente nel mio caso. –

+1

Hai assolutamente ragione. Stavo usando il pacchetto Matrix per matrici sparse, che apparentemente sovrascrive la funzione immagine in un modo che ignora mfrows. Le immagini di base funzionano bene. – Quantum7

1

Se non si desidera che le immagini in una griglia regolare (le diverse dimensioni potrebbero implicare questo), si potrebbe prendere in considerazione l'utilizzo della funzione di sottotrama dal pacchetto TeachingDemos. L'ultimo esempio nella pagina di aiuto mostra l'utilizzo di un'immagine come carattere di stampa, basta modificare per utilizzare le immagini e le dimensioni/posizioni diverse.

La funzione ms.image (stesso pacchetto) utilizzata con my.symbols è un'altra possibilità.

Problemi correlati