2015-01-20 2 views
11

Ich verwende Raster-Funktion wie in den Zeilen unten gezeigt. Meine letzte Zeile erzeugt etwas Ausgabe. Dieser Ausgang hat eine Zeile mit der Nummer dimensions : 240, 320, 76800 (nrow, ncol, ncell). Ich möchte dieses Bild erneut drucken, aber nur die ersten 200 Zeilen und die ersten 300 Spalten sagen. Wie kann ich das machen? Die zweite letzte Zeile unterhalb zeichnet das gesamte BildBild Raster R-Paket - Rasterdruck ohne Hintergrund und Rahmen und Legende

f <- "pictures/image1-1421787394.jpeg" 
f 
r <- raster(f) 
plot(r); 
r 

============================= update1

Ich habe png(filename = '~/x.png');par(mar=rep(0, 4), xpd = TRUE, oma=rep(0, 4),bty='n') ; plot(r,xlim=c(0,200),ylim=c(0,200),legend=FALSE,axes=FALSE); dev.off(), um das beschnittene Bild zu speichern. Ich konnte die Legende und Äxte und die Black Box loswerden. Das Problem besteht jedoch darin, dass das gespeicherte Bild viel mehr als einen beschnittenen Teil enthält - zum Beispiel einen weißen Teil um das Bild herum. Ich möchte nur den beschnittenen Teil des Originals speichern (Bildgröße 200 * 200 Pixel beibehalten). Bitte lassen Sie mich wissen, wie das geht?

Außerdem, wie könnte ich ein rotes Quadrat hinzufügen, das dem oben abgeschnittenen Teil zum ursprünglichen Bild entspricht? Ich meine, ich möchte ein rotes Quadrat (nur Kanten) oben auf dem Originalbild erhalten und dann dieses (Originalbild + Quadrat) als neues Bild speichern.

Wie könnte ich das tun?

update2 ++++++++++++++++++++++++++++++++++++++++++++++++

Zugabe wiederholbar Beispiel zu zeigen, was ich von weißen Hintergrund bedeuten

die letzte Zeile unterhalb Plots Bild abgeschnitten. Ich möchte, dass das Bild 100 * 100 ist, da mein xlim und Ylim 100 sind. Aber ich sehe einen weißen Hintergrund, wie im Beispiel unten gezeigt. (Sie können den Hintergrund nicht sehen, aber wenn Sie den Code auf Ihrem Computer ausgeführt werden und das Bild öffnen, werden Sie sehen es.)

library(raster) 
r <- raster(nrow=240, ncol=320) 
values(r) <- 1:ncell(r) 
plot(r) 
plot(r,xlim=c(0,100),ylim=c(0,100),legend=FALSE,axes=FALSE,frame.plot=F) 

enter image description here

Antwort

5

Sie es, indem Sie xlim und ylim tun können:

plot(r,xlim=c(0,299),ylim=c(0,199)) 

[UPDATE] Um von dem weißen Hintergrund loszuwerden, können Sie useRaster=F Parameter versuchen:

plot(r,xlim=c(0,100),ylim=c(0,100),legend=FALSE,axes=FALSE,frame.plot=F,useRaster=F) 
+0

Gibt es eine Möglichkeit, das neue Bild zu speichern (abgeschnitten)? – user2543622

+0

Sure - do 'png (Dateiname = '~/x.png'); Diagramm (r, xlim = c (0,200), ylim = c (0,200)); dev.off() '. Sie können auch andere Befehle wie 'pdf()' oder 'jpeg()' verwenden, um Bilder in verschiedenen Formaten zu erzeugen. –

+0

eine weitere Frage: Ich plane, Werte mit der Funktion getValues ​​() zu erhalten. getValues ​​(r) funktioniert gut. Aber ich möchte nur Werte für beschnittenes Bild erhalten. Wie kann ich die Funktion getValues ​​in Verbindung mit den Parametern xlim und ylim verwenden? – user2543622

4

Wenn Sie Ihre Frage gut verstehen, haben Sie eine RasterLayer r mit dim (r) von c (240, 320, 1) und Sie möchten diese auf die ersten 200 Zeilen und 300 Spalten zuschneiden und dann ohne diese plotten weißer Raum.

Geben Sie immer Beispieldaten an. In diesem Fall ist das einfach zu machen.

library(raster) 
r <- raster(nrow=240, ncol=320) 
values(r) <- 1:ncell(r) 

Es gibt verschiedene Möglichkeiten zum Zuschneiden nach Zeilen/Spalten. Zum Beispiel können Sie ein Extent-Objekt erstellen und dieses verwenden.

e <- extent(r, 1, 200, 1, 300) 
rc <- crop(r, e) 

Eine andere Möglichkeit (für kleinere Rastern) wäre Indizierung zu verwenden und Drop = FALSE

rc <- r[1:200, 1:300, drop=FALSE] 

Um eine Karte machen Sie ‚plot‘ oder ‚Bild‘ verwenden können.Vielleicht Bild ist mehr nach Ihrem Geschmack (weniger weißen Raum, aber keine Legende)

image(rc) 

mit Grundstück Sie die Größe des Gerätes vor dem Plotten festlegen.

dev.new(height=nrow(r), width=ncol(r)) 
plot(rc, legend=FALSE) 

Sie können auch in eine Datei wie png plotten, um Leerzeichen zu vermeiden. je nachdem, wie Sie Ihre ‚par'ameters gesetzt wie mai

png('test.png', width=450, height=275) 
plot(rc) 
dev.off() 

Andere Möglichkeiten mit diesem gehört die Verwendung von spplot oder levelplot im rasterVis Paket

spplot(rc) 
library(rasterVis) 
levelplot(rc) 

Um das rote Rechteck auf die behandeln zu bekommen Originalbild

plot(r) 
plot(e, add=TRUE, col='red', lwd=2) 
+0

Wenn ich png Befehl verwende was Parameter sollte ich einstellen, um irgendeinen Hintergrund zu vermeiden? In Ihrem Beispiel wird das beschnittene Bild 200 * 300 sein (wie beim Befehl "Umfang"), dann im Befehl "png" Warum haben Sie Breite = 450, Höhe = 275? – user2543622

+0

auch wenn ich mein Originalbild unten linken Ecke 0,0 ist. Aber wenn ich Extend zeichne, warum erscheint es als horizontaler Balken im oberen Teil des Bildes? sollte es nicht vertikale Bar sein, die sich im äußersten linken Teil des Bildes befindet? – user2543622

+0

Ich weiß nicht, was Sie mit "vermeiden Sie einen Hintergrund" meinen. Ich ändere die Breite/Höhe, um die Legende unterzubringen. Ich weiß nicht, was Sie mit horizontalen und vertikalen Balken meinen (sehe ich auch nicht). – RobertH

Verwandte Themen