Je recherche un moyen d'étirer un dégradé de couleurs entre deux valeurs et d'étiqueter la légende, quelle que soit la plage de valeurs de données dans l'ensemble de données. Existe-t-il essentiellement un équivalent fonctionnel à ylim()
pour les dégradés de couleurs?
Étant donné le code qui trace une valeur z généralement comprise entre -1 et 1, je peux tracer et étiqueter un gradient si les ruptures sont dans la plage de données:
library(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)
return(df)
}
t <- pp(30)
summary(t)
b <- c(-.5, 0, .5)
colors <- c('navyblue', 'darkmagenta', 'darkorange1')
p <- ggplot(data = t, aes(x = x, y = y))+
geom_tile(aes(fill = z))+
scale_fill_gradientn(colors = colors, breaks = b, labels = format(b))
ggsave(plot = p, filename = <somefile.png>, height = 3, width = 4)
Mais lorsque je modifie les coupures en valeurs en dehors de la plage observée, la coloration du dégradé ne semble pas s'ajuster et les étiquettes de dégradé n'apparaissent pas.
b <- c(-3, 0, 3)
Il est très important de se rappeler que dans ggplot, breaks
ne changera fondamentalement jamais l'échelle elle-même. Cela ne changera que ce qui est affiché dans le guide ou la légende.
Vous devriez plutôt modifier les limites de l'échelle:
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))
Et maintenant, si vous souhaitez que les ruptures qui apparaissent dans la légende se prolongent, vous pouvez les modifier pour définir où les graduations apparaissent.
Une bonne analogie à garder à l'esprit est toujours les axes x et y réguliers. La définition de "pauses" ne fera que changer l'endroit où les graduations apparaissent. Si vous souhaitez modifier étendue des axes x ou y, vous devez généralement modifier un paramètre comme leurs "limites".