Ich möchte ein Raster so plotten, dass Werte außerhalb der Skalengrenzen die gleichen Farben der Skalengrenzen selbst haben.Ausgrenzen als Grenzen in ggplot
# Generate data
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
}
pp200 <- pp(200)
ggplot(pp200, aes(x, y, fill = z)) +
geom_raster() +
scale_fill_gradient2(limits=c(-0.5, 0.5))
Alle außerhalb der Grenzen Werte sind grey50
(na.value
)!
Ich habe auch mit den scale_fill_gradient2()
Optionen ausprobiert:
oob=squish #This does not seem to exists anymore
und
oob=function(x, ...) x #does nothing
und
oob=clip #this does not work:
#Error in f(...) : argument "x2" is missing, with no default
Wie kann ich die aus gebundenen Werte können Farbe, die zur Zeit abgebildet werden an NA, mit den Grenzwerten der Skala? Im obigen Beispiel sollten die Werte > 0.5
blau sein, < -0.5
sollte rot sein. Ich weiß, dass ich das tun kann, indem ich den Datensatz unter Verwendung von Faktoren abschneide, aber ich möchte eine kontinuierliche Farbskala. Ich kann auch Pausen verwenden, um die angezeigten Grenzen zu setzen, aber ich möchte, dass die Vollfarbenskala unabhängig vom Plotinhalt angezeigt wird. Ich möchte auch jede Änderung der Daten wenn möglich vermeiden.
@Axeman Sie meinen als OOF-Funktion oder als Modifikation der Daten? Ja, natürlich kann ich die Daten ändern, aber das möchte ich vermeiden. Der Grund ist, dass zum Beispiel, wenn ich eine 'stat_summary()' verwenden möchte, es geschraubt wird. Ja, ich kann das umgehen, aber für etwas, das einfach sein sollte (und das in früheren ggplot-Versionen mit 'oob = squish' funktionierte) scheint es ein bisschen zu hackig zu sein (was übrigens nicht funktioniert' oob = function (z) ifelse (z <0,5, ifelse (z> -0,5, z, -0,5), 0,5) ') – AF7