J'ai un tracé ggplot2::geom_tile() qui prend des dizaines de secondes pour être rendu, donc je ne veux pas du tout le re-rendre, mais je veux enregistrer les événements de clic (utilisé avec shiny::nearPoints pour sélectionner ce qu'il faut montrer dans d'autres tracés) et, idéalement, j'aimerais qu'une annotation apparaisse à l'emplacement cliqué. Est-il possible d'ajouter une superposition pour afficher l'emplacement cliqué ?

0
Mike Lawrence 19 nov. 2020 à 00:00

1 réponse

Meilleure réponse

J'ai fini par trouver une solution dans laquelle j'utilise ggplot2::layer_grob() pour calculer le raster une fois, en l'enregistrant, puis en l'ajoutant en tant que annotation_raster au tracé avec d'autres annotations au-dessus chaque fois que ce dernier doit être mis à jour :


temp = ggplot(dat)+geom_raster(aes(x=x,y=y,fill=value))
raster = layer_grob(temp)$`1`$raster
p = (
    ggplot(dat)
    + annotation_raster(
        raster = raster
        , xmin = min(dat$x)
        , xmax = max(dat$x)
        , ymin = min(dat$y)
        , ymax = max(dat$y)
    )
)

#now p will re-render nearly instantly and you can add other geoms/annotations on top

0
Mike Lawrence 23 nov. 2020 à 14:55