2017-05-04 3 views
0

Je voudrais dessiner un tracé de niveau avec des échelles x et y comme des graduations log10. Par exemple, j'ai un tracé de niveau normal comme celui-ci.R: Comment dessiner un tracé de niveau avec des échelles de graduation

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

Mais, les échelles x et y sont pas journaliser échelles de tiques. J'ai trouvé l'autre bibliothèque "latticeExtra" avec la fonction d'échelle de tique de notation. Par exemple, en utilisant les mêmes x et y d'en haut, je peux dessiner les graduations du journal, mais je ne peux pas remplir les données du contour.

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

Comment puis-je dessiner un tracé de niveau avec des échelles de tiques du journal? Je voudrais tracer des dispersions sur le tracé de niveau plus tard comme emplacement de journal.

Merci d'avance.

Répondre

1

est ici une alternative à l'aide lattice et 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

si vous souhaitez continuer à utiliser filled.contour vous pouvez logtransform les x et y données directement et d'ajuster les axes en conséquence avec une instruction personnalisée axis, mais pas très élégant (le paramètre base::plotlog = "xy" ne malheureusement fait rien dans 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 vous pouvez aussi essayer si ggplot2 avec scale_y_log10() et scale_x_log10() travaillerait pour vous, voir this question and answer.