Search code examples
rplotcontourlatticelevelplot

R: How to draw a level plot with log tick scales


I would like to draw a level plot with x and y scales as a log10 ticks.

For example, I have a normal level plot like this.

x <- 10*1:nrow(volcano)
y <- 10*1:ncol(volcano)
filled.contour(x, y, volcano, color = terrain.colors, plot.title = title(main = "Volcano topolgy", 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(4, seq(90, 190, by = 10)))

enter image description here

But, the x and y scales are not log tick scales. I found the other library "latticeExtra" with log tick scale function. For example, using the same x and y from above I can draw the log ticks, but cannot fill the contour data.

library(lattice)
library(latticeExtra)
xyplot(y ~ x, scales = list(x = list(log = 10), y = list(log = 10)), xscale.components = xscale.components.log10ticks, yscale.components = yscale.components.log10ticks)

enter image description here

How can I draw a level plot with log tick scales? I would like to plot scatters on the level plot later on as a log location.

Thanks in advance.


Solution

  • Here's an alternative using lattice and latticeExtra

    library(lattice)
    library(latticeExtra)
    
    xx <- 1:nrow(volcano)
    yy <- 1:ncol(volcano)
    
    levelplot(
      x = volcano,
      xlim = range(xx),
      ylim = range(yy),
      scales = list(x = list(log = 10), y = list(log = 10)),
      xscale.components = xscale.components.log10ticks,
      yscale.components = yscale.components.log10ticks
    )
    

    enter image description here