2013-11-01 14 views
5

Sto creando una heatmap di correlazione in R con levelplot (reticolo). Vorrei bordi tra le scatole, ma non lungo l'esterno poiché interferisce con il bordo della trama. Come posso rimuovere i bordi esterni dalle scatole?R levelplot remove outer border (adjust border border)

Ecco il mio codice:

levelplot(matrix, border="black", 
      colorkey=list(height=.25, space="right", at=seq(-1, 1, .25), cuts=7), 
      scales=list(y=(list(cex=1)), tck = c(1,0), x=list(cex=1, rot=90)), 
      main="Leaf Correlations", xlab="", ylab="", 
      col.regions=scalebluered) 

e qui è quello che sembra .. non mi piace le doppie linee sui bordi ..

enter image description here

EDIT: qui è un esempio riproducibile:

data(mtcars) 
cars.matrix <- as.matrix(mtcars[c(2:8)]) 
cars.corr <- cor(cars.matrix) 
levelplot(cars.corr, border="black", colorkey=list(height=.25, space="right", 
      at=seq(-1, 1, .25), cuts=7), 
      scales=list(y=(list(cex=1)), tck = c(1,0), x=list(cex=1, rot=90)), 
      xlab="", ylab="") 
+0

Forse rimuovere la casella di delimitazione esterna invece? Il mio reticolo è un po 'arrugginito, ma forse qualcosa come 'par.settings = list (axis.line = list (lwd = 0)', o forse 'col =" white "' forse. – joran

+0

Hmmm ... che sembra rimuovere tutte le linee, comprese le zecche ... – joran

+0

Qualche possibilità potresti fare un esempio riproducibile minimo? –

risposta

4

OK, la correzione di questo è semplice se un po 'oscuro.

Basta usare lattice.options() per reimpostare il valore di axis.padding utilizzato per fattori, cambiando dal suo valore di default di 0,6 (un chilo) a 0,5 (senza imbottitura), e si dovrebbe andare bene:

lattice.options(axis.padding=list(factor=0.5)) 

## An example to show that this works 
data(mtcars) 
cars.matrix <- as.matrix(mtcars[c(2:8)]) 
cars.corr <- cor(cars.matrix) 
levelplot(cars.corr, border="black", colorkey=list(height=.25, space="right", 
      at=seq(-1, 1, .25), cuts=7), 
      scales=list(y=(list(cex=1)), tck = c(1,0), x=list(cex=1, rot=90)), 
      xlab="", ylab="") 

enter image description here

Per un possibile riferimento futuro utile, ho capito dando una rapida occhiata al codice utilizzato da prepanel.default.levelplot(). (Le varie prepanel.*** funzioni sono responsabili, tra le altre cose, per determinare le coordinate e area minima che devono essere assegnati ad ogni pannello in modo che gli oggetti da tracciare in sarà tutto adatta bene.)

head(prepanel.default.levelplot, 4) 

1 function (x, y, subscripts, ...)      
2 {             
3  pad <- lattice.getOption("axis.padding")$numeric 
4  if (length(subscripts) > 0) { 
+0

Grazie! Non sono sicuro che l'avrei mai capito! Nel frattempo, ho scoperto la libreria di corrplot per avere alcune opzioni eccellenti e potrebbe essere il modo migliore per me di andare piuttosto che provare a personalizzare il livello per le mie esigenze. Usando il mio esempio sopra, questo mi fa anche quello che voglio: 'library (corrplot) corrplot (cars.corr, method =" shade ", shade.col = NA, tl.col =" black ", tl.srt = 45, addgrid.col = "black") ' – Paul

+1

@Paul - Comprensibile, anche se ho appena aggiunto alcune note che si spera possano rendere il processo di pensiero che mi ha portato a quell'opzione un po 'più riproducibile da te e forse da altri. –

1

Un po 'di spettacoli di scavo that a lot of the par commands may not make it to Lattice package graphics. Ad esempio, par (bty = 'n') won't work in this levelplot example.

A differenza dei grafici R di base, i grafici a traliccio non vengono influenzati da molte delle opzioni impostate nella funzione par(). Per visualizzare le opzioni che possono essere modificate, consultare la guida (xyplot). È spesso più semplice impostare queste opzioni all'interno delle funzioni di tracciamento di alto livello ... è possibile scrivere funzioni che modificano il rendering dei pannelli.

Prova a passare il colore dell'asse direttamente nella grafica ala il metodo suggerito da Yangchen Lin qui: R lattice 3d plot: ticks disappear when changing panel border thickness

axis.line = list(col='transparent') 
+0

Provato questo, non sembrava fare nulla .. – Paul

+0

Non so se funziona in questa specifica istanza, ma l'opzione completa per sbarazzarsi delle linee degli assi sarebbe 'par.settings = list (axis.line = list (col =" transparent "))'. – user1521655