Comment insérer des images dans chaque barre individuelle dans un graphique ggplot

9

J'essaie de comparer différentes recrues NBA à travers différentes statistiques, et je pensais que le graphique aurait fière allure si je pouvais ajouter le visage du joueur à la fin du graphique comme dans les beaux graphiques r / dataisbeautiful . Mon code est actuellement le suivant:

a3 %>%
  ggplot(aes(x = reorder(Player,
                         PPM),
             y = PPM)) +
  geom_bar(stat = "identity",
           aes(fill = Player)) +
  geom_text(aes(label = PPM), size = 3, position = position_dodge(width = 1),
            hjust = -0.1) +
  coord_flip() +
  theme_minimal() +
  xlab("Player") +
  ylab("Points Per Minute") +
  theme(legend.position = "none")

Voici à quoi ressemble mon graphique actuellementcomme

Pedro Guizar
la source
2
Avez-vous vu cet article de blog, semble assez pertinent: jcarroll.com.au/2019/08/08/13/ggtext-for-images-as-x-axis-labels
Ben
2
Le ggtextpackage semble permettre ceci: github.com/clauswilke/ggtext#markdown-in-theme-elements
Jon Spring
Est-ce que cela répond à votre question? Inclusion d'images sur l'étiquette d'axe dans un ggplot2 animé
Tjebo

Réponses:

7

Vous n'avez pas fourni de reprex, donc je dois inventer quelque chose. Je le ferais probablement comme ça.

library(tidyverse)
library(ggtextures)
library(magick)
#> Linking to ImageMagick 6.9.9.39
#> Enabled features: cairo, fontconfig, freetype, lcms, pango, rsvg, webp
#> Disabled features: fftw, ghostscript, x11

data <- tibble(
  count = c(5, 6, 6, 4, 2, 3),
  animal = c("giraffe", "elephant", "horse", "bird", "turtle", "dog"),
  image = list(
    image_read_svg("http://steveharoz.com/research/isotype/icons/giraffe.svg"),
    image_read_svg("http://steveharoz.com/research/isotype/icons/elephant.svg"),
    image_read_svg("http://steveharoz.com/research/isotype/icons/horse.svg"),
    image_read_svg("http://steveharoz.com/research/isotype/icons/bird.svg"),
    image_read_svg("http://steveharoz.com/research/isotype/icons/turtle.svg"),
    image_read_svg("http://steveharoz.com/research/isotype/icons/dog.svg")
  )
)

ggplot(data, aes(animal, count, fill = animal, image = image)) +
  geom_isotype_col(
    img_height = grid::unit(1, "null"), img_width = NULL,
    ncol = 1, nrow = 1, hjust = 1, vjust = 0.5
  ) +
  coord_flip() +
  guides(fill = "none") +
  theme_minimal()

Créé le 2019-11-03 par le package reprex (v0.3.0)

Claus Wilke
la source
Merci, cela a très bien fonctionné! Je voulais demander s'il était possible d'afficher deux images sur la même barre ici (je suppose en jouant avec la valeur hjust) en ayant quelque chose comme ceci: ggplot (data, aes (animal, count, fill = animal, image = image & x))
Pedro Guizar
Veuillez publier une question distincte de premier niveau à ce sujet.
Claus Wilke
Je viens de faire @Claus Wilke stackoverflow.com/questions/58793147/…
Pedro Guizar
C'est très utile. Existe-t-il un plan pour obtenir ggtextures sur CRAN?
stevec
Non. Il y a maintenant ggpattern qui est beaucoup plus puissant. github.com/coolbutuseless/ggpattern
Claus Wilke