2010-09-08 1 views
7

Ich muss mehrere JPEG-Bilder in einem einzigen kombinierten Display (oder Leinwand?) Plotten und anzeigen. Angenommen, ich besitze Bilder {a, b, c, d} .jpg, jede von unterschiedlicher Größe, und ich würde sie gerne auf einer Seite in einem 2x2-Raster darstellen. Es wäre auch schön, für jeden Unterplot einen Titel festlegen zu können.Plotten mehrerer JPEG-Bilder in einem einzigen Display

Ich habe gründlich nach einer Lösung gesucht, aber konnte nicht herausfinden, wie es geht, also würden alle Ideen wirklich helfen. Ich würde vorzugsweise eine Lösung verwenden, die auf dem EBImage-Paket basiert.

+0

Danke für die Antworten. Das eigentliche Problem war der Umgang mit Bilddaten, mit dem rimage-Paket habe ich die Bilddaten aus dem EBImage-Paket besser zur Anzeige gebracht. Ich bekomme immer noch furchtbar große Ränder, wenn ich die Plots mit dem Parameter mfrow() organisiere, obwohl ich viel mit den Parametern oma und mar gespielt habe. – user442446

Antwort

4

Es gibt zwei Möglichkeiten, wie mehrere Parzellen mit Basisgrafikfunktionen, nämlich par(mfrow=c(rows,columns)) (Ersatz rows und columns mit ganzen Zahlen) zu ordnen und layout(mat) wo mat eine Matrix wie matrix(c(1,2,3,4)) ist.
Weitere Informationen finden Sie unter ?par, ?layout und speziell Quick-R: Combining Plots.

Wie auch immer Ihre Frage zu Bildern ist, weiß ich nicht, ob es Ihnen überhaupt hilft. Wenn nicht, tut mir leid, dass ich Ihre Frage falsch interpretiert habe.

2

zu Henriks Lösung, eine ziemlich bequeme Möglichkeit der Verwendung der Par() Funktion hinzuzufügen ist:

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

Auf diese Weise können Sie die Parameter wieder auf den alten Zustand versetzt, nachdem Sie den Code lief. Beachten Sie, dass dies NICHT der Fall ist, wenn einer der Plots einen Fehler ergab.

Beachten Sie, dass R die Plots immer in der gleichen Reihenfolge platziert. Mit mfrow wird das Gitter Zeile für Zeile gefüllt. Wenn Sie mfcol anstelle von mfrow im Code verwenden, füllen Sie Spalte für Spalte aus.

Layout ist eine ganz andere Geschichte. Hier können Sie festlegen, in welcher Reihenfolge die Plots platziert werden sollen. So funktioniert genauso wie par(mfcol=c(2,2)). Aber layout(matrix(c(1,4,3,2),ncol=2)) platziert die erste Handlung links oben, die nächste rechts unten, die dritte rechts oben und die letzte links unten.

Jedes Diagramm ist vollständig unabhängig, daher werden die von Ihnen mit der Option main angegebenen Titel ebenfalls gedruckt. Wenn Sie mehr Flexibilität wünschen, sollten Sie sich die Gitterplots ansehen.

+0

Dies funktioniert nicht mit der Bildfunktion, die die ganze Figur überschreibt. – Quantum7

+0

@ Quantum7 Ich habe es mit 'image()' versucht, und es funktioniert in meinem Fall sehr gut. –

+1

Sie haben absolut Recht. Ich habe das Matrix-Paket für dünn besetzte Matrizen verwendet, das die Bildfunktion offenbar so überschreibt, dass es mfows ignoriert. Basisbilder funktionieren gut. – Quantum7

1

Wenn die Bilder nicht in einem regelmäßigen Raster angezeigt werden sollen (die verschiedenen Größen könnten dies bedeuten), sollten Sie die Unterplotfunktion aus dem TeachingDemos-Paket verwenden. Im letzten Beispiel auf der Hilfeseite wird die Verwendung eines Bilds als Zeichen dargestellt. Ändern Sie einfach, um die verschiedenen Bilder und Größen/Orte zu verwenden.

Die ms.image-Funktion (dasselbe Paket), die mit my.symbols verwendet wird, ist eine andere Möglichkeit.