2011-11-09 50 views
5

我可能会在这里丢失一些简单的东西......我无法找到任何方法去除跨越图例区分不同颜色的线条;在?filled.contour以下的从火山地貌例子,我有这样的:删除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) 

我已经成功地从轴删除所有的标签和刻度的标志,但线条仍然存在(顺便说一句,我想达到的效果是(我相信)在Matlab默认)

回答

8

如果您检查filled.contour你会看到这行代码:

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

绘制颜色键矩形。它是矢量化的,所以它绘制了每个单独的颜色框。函数rect接受参数border,如果设置为NA,则会省略矩形的内部边界。因此,创建您自己的函数版本,并将此行更改为:

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

或使其成为参数,而不是硬编码。当我这样做,我得到如下图:

enter image description here

+0

谢谢 - 虽然我并没有期待它那么复杂! – ChrisW

+1

@ChrisW对我来说这似乎并不复杂,但也许我已经习惯了。诸如“filled.contour”之类的函数的作者无法预测用户可能想要调整的任何可能的调整。 – joran

0

你甚至都不需要改变filled.contour硬编码。显然,函数rect中的参数border依赖于par("fg")。只需设置par(fg = NA)即可删除这些黑线。

+0

不幸的是,如果你设置了''par(fg = NA)'',你将会消除图例和坐标轴上的分界线。 – epsilone

+1

因此情况是这样,但您可以随时手动设置'边框=“黑色”'和'col =“黑色”'以使其恢复。 –