2017-05-04 4 views
0

Ich möchte ein Level-Plot mit X-und Y-Skalen als log10 Ticks zeichnen.R: Wie zeichne ein Level-Plot mit Log-Tick-Skalen

Zum Beispiel habe ich eine normale Ebene Handlung wie folgt.

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

Aber werden die x- und y-Skalen nicht tick Skalen einloggen. Ich habe die andere Bibliothek "gitterExtra" mit Log Tick Scale Funktion gefunden. Wenn ich zum Beispiel das gleiche x und y von oben verwende, kann ich die Log-Ticks zeichnen, aber ich kann die Konturdaten nicht füllen.

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

Wie kann ich ein ebenes Grundstück mit log tick Skalen ziehen? Ich möchte später Scatter auf dem Level-Plot als Log-Location darstellen.

Vielen Dank im Voraus.

Antwort

1

Hier ist eine Alternative mit lattice und 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

1

wenn Sie behalten möchten filled.contour verwenden, können Sie die x und y Daten direkt logtransform und die Achsen entsprechend mit einer axis Anweisung benutzerdefinierter anpassen, aber es ist nicht sehr elegant (die base::plotlog = "xy" Parameter leider tut man nicht alles in filled.contour) :

x <- log(10*1:nrow(volcano)) 
y <- log(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, at = log(seq(100, 800, by = 100)), labels = seq(100, 800, by = 100)); 
               axis(2, at = log(seq(100, 600, by = 100)), labels = 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 können Sie auch versuchen, wenn ggplot2 mit scale_y_log10() und scale_x_log10() für Sie arbeiten würde, this question and answer sehen.

Verwandte Themen