2012-12-15 8 views
17

Ich suche nach einer Möglichkeit, einen Farbverlauf zwischen zwei Werten zu strecken und die Legende zu beschriften, unabhängig vom Bereich der Datenwerte im Dataset. Gibt es im Wesentlichen ein funktionales Äquivalent zu ylim() für Farbverläufe?ggplot skaliert Farbverlauf außerhalb des Datenbereichs

Bei Code, der zwischen -1 und 1 typischerweise az Wert Plots, kann ich plotten und einen Gradienten kennzeichnen, wenn die Pausen im Datenbereich sind:

require(ggplot2) 

#generator from http://docs.ggplot2.org/current/geom_tile.html 
pp <- function (n,r=4) { 
    x <- seq(-r*pi, r*pi, len=n) 
    df <- expand.grid(x=x, y=x) 
    df$r <- sqrt(df$x^2 + df$y^2) 
    df$z <- cos(df$r^2)*exp(-df$r/6) 
    df 
} 

t <- pp(30) 
summary(t) 
b <- c(-.5,0,.5) 
p <- ggplot(data=t,aes(x=x,y=y))+ 
    geom_tile(aes(fill=z))+ 
    scale_fill_gradientn(colours=c("navyblue","darkmagenta","darkorange1"),breaks=b,labels=format(b)) 
try(ggsave(plot=p,filename=<somefile.png>,height=3,width=4)) 

graham jeffries ggplot scale fill example

Aber wenn ich das ändern bricht auf Werte außerhalb des beobachteten Bereichs, die Farbverlaufsfarbe scheint sich nicht anzupassen und die Verlaufsbeschriftungen erscheinen nicht.

b <- c(-3,0,3) 

graham jeffries ggplot scale fill example 2

Antwort

37

Es ist sehr wichtig, dass in ggplot zu erinnern, breaks wird sich im Grunde nie den Maßstab ändern. Es ändert nur, was in der Anleitung oder Legende angezeigt wird.

sollten Sie die stattdessen Grenzen der Skala zu ändern werden:

ggplot(data=t, aes(x=x, y=y)) + 
    geom_tile(aes(fill=z)) + 
    scale_fill_gradientn(limits = c(-3,3), 
    colours=c("navyblue", "darkmagenta", "darkorange1"), 
    breaks=b, labels=format(b)) 

Und jetzt, wenn Sie die Pausen wollen, die in der Legende erscheinen weiter zu verlängern, können Sie sie wo erscheinen die Strichmarkierungen gesetzt ändern.

Eine gute Analogie, die man beachten sollte, sind immer die regulären x- und y-Achsen. Das Setzen von "Pausen" ändert sich dort, wo die Markierungen erscheinen. Wenn Sie die Ausdehnung der X- oder Y-Achsen ändern möchten, würden Sie normalerweise eine Einstellung wie ihre "Grenzen" ändern.

+0

Ich denke, ich versuche etwas ähnliches zu erreichen, aber mit dieser Lösung versagt. Ich habe eine Reihe von Datensätzen, bei denen die Werte in begrenzten Bereichen liegen, aber theoretisch können sie zwischen 0 und -100 (dB) liegen. scale_fill_gradient (low = "white", high = "red") ist in Ordnung, aber ich kann die Datensätze nicht visuell vergleichen. scale_fill_gradient (niedrig = "weiß", hoch = "rot", limits = c (0, -100), guide = "legende", limits = c (0, -100), breaks = b, etiketten = format (c (0, -100)) stellt nicht die Legende dar. Ich bin ratlos. – MartinT