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?

17
demandé sur Emerson 2011-08-02 06:24:42

4 réponses

cette question peut aussi être corrigée par une option dans scale_fill_continuous

scale_fill_continuous(na.value = 'salmon')
10
répondu Bishops_Guest 2016-01-28 18:55:19

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)

an example

24
répondu Triad sou. 2011-08-02 08:48:20

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.

4
répondu joran 2011-08-02 04:57:12

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é par theme et theme_rect a été remplacé par element_rect.

  • En spécifiant element_rect, color est la limite du rectangle alors que fill 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.

4
répondu momeara 2013-02-24 08:20:36