2016-07-01 14 views
2

Ich habe eine Rasterkarte, die ich mit ggplot2 mit einer kontinuierlichen Skala und beschriftete Isolinien obendrein plotten möchte.R Hinzufügen von Legende und directlabels zu ggplot2 Konturplot

Dafür ich bin mit dem directlabels Paket und bin in der Nähe zu bekommen, was ich will, aber ich kann nicht sowohl die Legende und die markierten Isolinien auf der gleichen Karte

Der folgende Code reproduziert mein Problem bekommen:

install.packages(c('ggplot2', 'directlabels')) 
library('ggplot2') 
library('directlabels') 
df <- expand.grid(x=1:100, y=1:100) 
df$z <- df$x * df$y 

# Plot 1: this plot is fine but without contours  
p <- ggplot(aes(x=x, y=y, z=z), data = df) + 
    geom_raster(data=df, aes(fill=z)) + 
    scale_fill_gradient(limits=range(df$z), high = 'white', low = 'red') 
p 

# Plot 2: This plot adds the isolines but no labels and it also adds a second legend for level which I don't want 
p <- p + geom_contour(aes(colour = ..level..), color='gray30', na.rm=T,  show.legend=T) 
p 

# Plot 3: This plot has the labeled isolines but it removes the z legend that I want to show 
direct.label(p, list("bottom.pieces", colour='black')) 

Plot 1 enter image description here

Plot 2 enter image description here

Plot 3 enter image description here

Ich möchte die farbigen Raster im Hintergrund haben, mit ihm auf der Seite Farblegende ist und die markierten isolines an der Spitze. Gibt es eine Möglichkeit, dies zu tun?

Gibt es auch einen Weg, um die Etiketten in der Mitte der Isolinien statt der unteren oder oberen zu platzieren?

Vielen Dank im Voraus

Pablo

Antwort

4

Zuerst Beheben des Problems mit den Legenden zu tun.

library(ggplot2) 
library(directlabels) 

df <- expand.grid(x=1:100, y=1:100) 
df$z <- df$x * df$y 

p <- ggplot(aes(x=x, y=y, z=z), data = df) + 
    geom_raster(data=df, aes(fill=z), show.legend = TRUE) + 
    scale_fill_gradient(limits=range(df$z), high = 'white', low = 'red') + 
    geom_contour(aes(colour = ..level..)) + 
    scale_colour_gradient(guide = 'none') 

p1 = direct.label(p, list("bottom.pieces", colour='black')) 
p1 

enter image description here

Es gibt nicht allzu viele Optionen für die Etiketten zu positionieren. Eine Möglichkeit ist angled.boxes, aber die fill Farbe könnte nicht zu schön sein.

p2 = direct.label(p, list("angled.boxes")) 
p2 

enter image description here

Um die fill Farbe transparent (unter Verwendung von Code aus here

p3 = direct.label(p, list("far.from.others.borders", "calc.boxes", "enlarge.box", 
     box.color = NA, fill = "transparent", "draw.rects")) 
p3 

enter image description here

zu ändern Und die Etiketten aus den Konturlinien zu bewegen.

p4 = direct.label(p, list("far.from.others.borders", "calc.boxes", "enlarge.box", 
     hjust = 1, vjust = 1, box.color = NA, fill = "transparent", "draw.rects")) 
p4 

enter image description here

+0

Dies ist genau das, was ich brauchte. Ich danke dir sehr. – Ludecan

Verwandte Themen