2011-11-09 18 views
5

Me puede estar faltando algo simple aquí ... No puedo encontrar de todos modos para eliminar las líneas que cruzan la leyenda que diferencia los diferentes colores; siguiente en el ejemplo de la topografía volcán en ?filled.contour, lo he entendido:Extracción de líneas dentro de la leyenda de fill.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) 

he conseguido eliminar todas las etiquetas y marcas de garrapatas del eje, pero todavía existen las líneas (dicho sea de paso, la efecto que yo estoy tratando de lograr es (creo) el valor por defecto en Matlab)

Respuesta

8

Si examina el código para filled.contour verá esta línea:

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

que dibuja el rectángulo de color clave. Está vectorizado, por lo que dibuja cada uno de los cuadros de color individuales. La función rect acepta un argumento border, que si establece en NA omitirá los bordes internos de los rectángulos. Así que cree su propia versión de la función y cambie esta línea a:

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

o hágala un argumento, en lugar de una codificación difícil. Cuando hago esto, me sale el siguiente gráfico:

enter image description here

+0

Gracias - ¡No esperaba que fuera tan complicado! – ChrisW

+1

@ChrisW No me parece tan complicado, aunque tal vez estoy acostumbrado. Los autores de funciones como 'filled.contour' no pueden anticipar _ todos los ajustes posibles que un usuario querrá hacer. – joran

0

Ni siquiera necesita cambiar el hardcode filled.contour. Aparentemente, el argumento border en la función rect se basa en par("fg"). Simplemente configure par(fg = NA) para eliminar esas líneas negras.

+0

Desafortunadamente, si establece '' par (fg = NA) '' eliminará los bordes delimitadores de la leyenda y los ejes. – epsilone

+1

Por lo tanto, es el caso, pero siempre puede establecer manualmente 'borders = "black"' y 'col = "black"' para recuperarlos. –

Cuestiones relacionadas