2015-01-20 18 views
11

Sto usando la funzione raster come mostrato nelle righe sottostanti. La mia ultima riga produce un po 'di output. Quell'output ha una riga che dice dimensions : 240, 320, 76800 (nrow, ncol, ncell). Vorrei ristampare quell'immagine, ma dire solo le prime 200 righe e le prime 300 colonne. Come lo posso fare? La penultima riga sotto traccia l'intera immaginepacchetto raster di immagine R - stampa raster senza sfondo e bordo e legenda

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

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

Ho fatto 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() per salvare l'immagine ritagliata. Sono stato in grado di sbarazzarmi della leggenda e delle asce e della scatola nera. Ma il problema è che l'immagine salvata contiene molto più della parte ritagliata, ad esempio la parte bianca attorno all'immagine. Voglio salvare solo la parte ritagliata dell'originale (mantenere le dimensioni dell'immagine 200 * 200 pixel). Per favore, fammi sapere come farlo?

Inoltre, come è possibile aggiungere un quadrato rosso che corrisponde alla parte ritagliata sopra all'immagine originale? Voglio dire, mi piacerebbe ottenere un quadrato rosso (solo i bordi) nella parte superiore dell'immagine originale e quindi salvare questo (immagine originale + quadrato) come una nuova immagine.

Come potrei farlo?

Update2 ++++++++++++++++++++++++++++++++++++++++++++++++

aggiungendo esempio ripetibile per mostrare quello che voglio dire da uno sfondo bianco

l'ultima riga sotto trame ritagliata immagine. Voglio che l'immagine sia 100 * 100 come xlim e ylim sono 100. Ma vedo uno sfondo bianco come mostrato nell'esempio qui sotto. (Non si può vedere sullo sfondo, ma se si esegue il codice sul computer e aprire l'immagine, lo vedrete.)

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

risposta

5

Puoi farlo impostando xlim e ylim:

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

[UPDATE ] Per sbarazzarsi del fondo bianco, si può provare useRaster=F parametro:

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

c'è un modo per salvare la nuova immagine (ritagliata)? – user2543622

+0

Sicuro - do 'png (filename = '~/x.png'); trama (R, XLIM = c (0,200), = ylim c (0200)); dev.off() '. Puoi anche altri comandi come 'pdf()' o 'jpeg()' per produrre immagini in diversi formati. –

+0

un'altra domanda: sto pensando di ottenere valori usando la funzione getValues ​​(). getValues ​​(r) funziona bene. Ma voglio ottenere valori solo per l'immagine ritagliata. Come posso utilizzare la funzione getValues ​​in combinazione con i parametri xlim e ylim? – user2543622

4

Se capire bene la tua domanda, è necessario un livello raster r con dim (r) di C (240, 320, 1) e da ritagliare che alle prime 200 righe e 300 colonne e poi tracciare che senza spazio bianco.

Fornire sempre dati di esempio. In questo caso è facile da fare.

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

Ci sono diversi modi di ritagliare per righe/colonne. Ad esempio è possibile creare un oggetto estensione e utilizzarlo.

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

Un altro modo (per i raster di dimensioni più piccole) sarebbe quella di utilizzare l'indicizzazione e la goccia = FALSE

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

Per fare una mappa è possibile utilizzare 'plot' o 'immagine'.Forse immagine è più di vostro gradimento (meno spazio bianco, ma nessuna leggenda)

image(rc) 

con la trama è possibile impostare le dimensioni del dispositivo prima della stampa.

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

È inoltre possibile stampare su un file come png per evitare spazi vuoti; a seconda di come si imposta il tuo 'par'ameters come Mai

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

Altri modi per affrontare questo includono l'utilizzo di spplot, o levelplot nel pacchetto rasterVis

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

Per ottenere il rettangolo rosso sulla immagine originale

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

Quando sto usando il comando png cosa i parametri dovrebbero essere impostati per evitare qualsiasi background? nel tuo esempio l'immagine ritagliata sarà 200 * 300 (come per comando estensione) poi nel comando png perché hai larghezza = 450, altezza = 275? – user2543622

+0

anche quando grafico l'immagine originale in basso a sinistra è 0,0. Ma quando disegno estendo perché appare come una barra orizzontale nella parte superiore dell'immagine? non dovrebbe essere la barra verticale situare nella parte più a sinistra dell'immagine? – user2543622

+0

Non so cosa intendi con "evita gli sfondi". Io cambio la larghezza/altezza per accogliere la legenda. Non so cosa intendi per barra orizzontale e verticale (non vedo neanche io). – RobertH

Problemi correlati