2011-11-09 18 views
5

Potrei mancare qualcosa di semplice qui ... Non riesco comunque a trovare le righe che attraversano la leggenda differenziando i diversi colori; segue sul dall'esempio vulcano topografia ?filled.contour, ho questo:Rimozione linee all'interno della legenda filled.contour

x <- 10*1:nrow(volcano) 
y <- 10*1:ncol(volcano) 

filled.contour(x, y, volcano, color = terrain.colors, 
    plot.title = title(main = "The Topography of Maunga Whau", 
    xlab = "Meters North", ylab = "Meters West"), 
    plot.axes = { axis(1, seq(100, 800, by = 100)) 
       axis(2, seq(100, 600, by = 100)) }, 
    key.title = title(main="Height\n(meters)"), 
    key.axes = axis(2, 
      labels=FALSE, 
      at=FALSE, 
      lty=NULL, 
      tick=FALSE, 
      col="white", 
      col.ticks=NULL) 
) 
mtext(paste("filled.contour(.) from", R.version.string),side = 1, line = 4, adj = 1, cex = .66) 

sono riuscito a rimuovere tutte le etichette e tick-segni dall'asse, ma ancora esistono le linee (per inciso, la effetto che sto cercando di realizzare è (credo) il default in Matlab)

risposta

8

Se si esamina il codice per filled.contour vedrete questa linea:

rect(0, levels[-length(levels)], 1, levels[-1L], col = col) 

che disegna il rettangolo chiave di colore. È vettorializzato, quindi sta disegnando ciascuna delle singole caselle di colore. La funzione rect accetta un argomento border, che se si imposta su NA ometterà i bordi interni dei rettangoli. Quindi creare la propria versione della funzione e modificare questa linea per:

rect(0, levels[-length(levels)], 1, levels[-1L], col = col, border = NA) 

o renderlo un argomento, piuttosto che codifica duro. Quando faccio questo, ottengo il seguente grafico:

enter image description here

+0

Grazie - Non mi aspettavo che fosse così complicato! – ChrisW

+1

@ChrisW Non mi sembra complicato, anche se forse ci sono abituato. Gli autori di funzioni come 'filled.contour' non possono anticipare _qualche_ possibile tweak che un utente vorrà fare. – joran

0

Non c'è nemmeno bisogno di cambiare il hardcode filled.contour. Apparentemente l'argomento border nella funzione rect si basa su par("fg"). Basta impostare par(fg = NA) per rimuovere quelle linee nere.

+0

Sfortunatamente, se imposti '' par (fg = NA) '' cancelli i bordi di delimitazione sulla legenda e sugli assi. – epsilone

+1

Quindi è il caso, ma puoi sempre impostare manualmente 'borders = "black"' e 'col = "black"' per riaverli. –

Problemi correlati