ChrisW
ChrisW

Reputation: 5068

Removing lines within filled.contour legend

I might be missing something simple here... I can't find anyway to remove the lines that cross the legend differentiating different colours; following on the from the volcano topography example in ?filled.contour, I've got this:

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)

I've managed to remove all the labels and tick-marks from the axis, but the lines still exist (incidentally, the effect I'm trying to achieve is (I believe) the default in Matlab!)

Upvotes: 5

Views: 5271

Answers (2)

You don't even need to change the filled.contour hardcode. Apparently the argument border in the function rect relies on par("fg"). Just set par(fg = NA) to remove those black lines.

Upvotes: 1

joran
joran

Reputation: 173577

If you examine the code for filled.contour you'll see this line:

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

that draws the color key rectangle. It's vectorized, so it's drawing each of the individual color boxes. The function rect accepts an argument border, which if you set to NA will omit the internal borders of the rectangles. So create your own version of the function and change this line to :

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

or make it an argument, rather than hard coding. When I do this, I get the following graph:

enter image description here

Upvotes: 9

Related Questions