ggplot2 faire valeur manquante dans geom tuile n'est pas vide
Dans le geom_tile()
couche dans le paquet de visualisation des données ggplot2 pour R, quand une cellule ne contient pas de données, elle n'est pas dessinée. Par exemple: http://docs.ggplot2.org/current/geom_tile.html et rechercher "valeur manquante".
je voudrais modifier ce comportement pour afficher la valeur minimale sur toutes les tuiles. Est-ce possible et si oui, comment?
contexte supplémentaire: quand j'utilise
stat_density2d(aes(x=x,y=y, fill=..density..), geom="tile", contour=FALSE)
je voudrais que les régions sans densité soient très semblables pour les régions avec très peu de densité. Comme il est maintenant, si dire le spectre de couleur est du bleu au rouge et le fond est blanc, alors là quand il n'y a pas de données dans une tuile, il est blanc et quand il ya un point de données unique dans une tuile est bleu.
Ajout d'un pseudo comte de données semble possible, mais comment puis-je savoir à l'avance comment distribuer le pseudo-compte? et dans le cas où il y a faceting?
4 réponses
cette question peut aussi être corrigée par une option dans scale_fill_continuous
scale_fill_continuous(na.value = 'salmon')
si vos données sont des données de type grid, Que diriez-vous d'ajouter un autre geom_tile()
pour NA par subset()
?
# 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
}
pp20 <- pp(20)[sample(20*20, size = 200),]
df_grid <- expand.grid(x = unique(pp20$x), y = unique(pp20$x))
df_merge <- merge(pp20, df_grid, by = c("x", "y"), all = TRUE)
# Missing values
ggplot(df_merge, aes(x = x, y = y)) +
geom_tile(data = subset(df_merge, !is.na(z)), aes(fill = z)) +
geom_tile(data = subset(df_merge, is.na(z)), aes(colour = NA),
linetype = 0, fill = "pink", alpha = 0.5)
cette réponse est peut-être un peu trop "mignonne", mais une solution pourrait-elle simplement être de changer la couleur de fond de votre parcelle pour être la couleur minimale dans votre échelle? Par exemple:
+ opts(plot.background = theme_rect(colour = "blue")
si votre parcelle a une structure plus complexe et cela finit par rendre le fond bleu dans les zones où vous ne voulez pas que cela se produise, vous pouvez tracer un geom_rect
première couche, qui s'étend à travers les plages de vos données.
Pour la postérité, voici la bonne solution compatible avec ggplot2
version 1.9.3
+ theme(panel.background=element_rect(fill="blue", colour="blue")
dans la réponse de joran, le
plot.background
est l'ensemble de la parcelle, y compris le titre et la légende etc.panel.background
est la zone où les données s'affiche.Dans la dernière version de ggplot2,
opts
a été remplacé partheme
ettheme_rect
a été remplacé parelement_rect
.En spécifiant
element_rect
,color
est la limite du rectangle alors quefill
a l'intérieur du rectangle.
j'avais employé à l'origine,
+ geom_rect(aes(xmin=-Inf, xmax=Inf, ymin=-Inf, ymax=Inf), fill="blue")
mais en ajoutant geom_raster
plutôt que geom_tile
sur l'arrière-plan et de générer pdf
sortie, les utilisateurs de pdf ont eu beaucoup de mal à rendre le tracé, utilisant beaucoup plus de cycles cpu et de mémoire.