2016-09-24 1 views
2

J'essaie d'utiliser la solution que @jlhoward fournit ici pour créer un tracé de contour dans ggplot avec des intervalles de contour définis de manière discrète. Cependant, mon ensemble de données passe à zéro et cela semble entraîner un décalage des couleurs et des étiquettes des valeurs inférieures à zéro.Comment tracer des contours remplis discrets qui traversent zéro avec ggplot?

x<-seq(-11,11,.03)     # note finer grid 
y<-seq(-11,11,.03) 
xyz.func<-function(x,y) {-10.4+6.53*x+6.53*y-0.167*x^2-0.167*y^2+0.0500*x*y} 
gg <- expand.grid(x=x,y=y) 
gg$z <- with(gg,xyz.func(x,y))  # need long format for ggplot 
library(ggplot2) 
library(RColorBrewer)    #for brewer.pal() 
brks <- cut(gg$z,breaks=seq(-50,100,len=6)) 
brks <- gsub(","," - ",brks,fixed=TRUE) 
gg$brks <- gsub("\\(|\\]","",brks) # reformat guide labels 
ggplot(gg,aes(x,y)) + 
    geom_raster(aes(fill=brks))+ 
    scale_fill_manual("Z",values=brewer.pal(6,"YlOrRd"))+ 
    scale_x_continuous(expand=c(0,0))+ 
    scale_y_continuous(expand=c(0,0))+ 
    coord_fixed() 

Ce produit cette parcelle: this plot

Comme vous pouvez le voir, les couleurs et les étiquettes pour les deux contours supérieurs sont en arrière. Des suggestions sur la façon de résoudre ce problème?

Original @jlhoward solution

PS J'espère que le lien avec les œuvres d'image. On dirait que je besoin de plus de points de réputation avant que je puisse inclure des images dans un poste :(

Répondre

3

Lorsque vous créez des pauses à l'aide cut, vous obtenez automatiquement un factor, commandé par l'ordre des pauses que vous avez utilisé dans cut. Mais puis en changeant brks avec les appels gsub convertit brks de factor en character, qui a l'ordre alphabétique.Vous pouvez réinitialiser la commande avec un appel à la fonction factor, mais il est plus facile de simplement créer les étiquettes que vous voulez dans l'appel d'origine à cut:

breaks = seq(-50,100,len=6) 

gg$brks = cut(gg$z, breaks=breaks, 
       labels=paste0(breaks[-length(breaks)]," - ", breaks[-1])) 

Maintenant, au lieu des étiquettes par défaut créées par cut, vous avez exactement les étiquettes que vous voulez.

Comparer str(gg) avec votre méthode originale et la méthode ci-dessus pour voir que brks est le caractère dans le premier et le facteur dans le dernier.

Voici le tracé qui en résulte. J'ai également pris la liberté d'inverser l'ordre de la légende pour correspondre à l'ordre des couleurs dans l'intrigue. Cela facilite la visualisation de la relation entre les couleurs et les plages de valeurs.

ggplot(gg,aes(x,y)) + 
    geom_raster(aes(fill=brks))+ 
    scale_fill_manual("Z",values=brewer.pal(6,"YlOrRd"))+ 
    scale_x_continuous(expand=c(0,0))+ 
    scale_y_continuous(expand=c(0,0))+ 
    coord_fixed() + 
    guides(fill=guide_legend(reverse=TRUE)) 

enter image description here