Cómo insertar imágenes en cada barra individual en un gráfico ggplot

9

Estoy tratando de comparar diferentes novatos de la NBA en diferentes estadísticas, y pensé que el gráfico se vería genial si pudiera agregar la cara del jugador al final del gráfico como en los gráficos r / dataisbeautiful . Mi código es actualmente esto:

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")

Así es como se ve mi gráfico actualmenteme gusta

Pedro Guizar
fuente
2
¿Has visto esta publicación de blog, parece bastante relevante: jcarroll.com.au/2019/08/13/ggtext-for-images-as-x-axis-labels
Ben
2
El ggtextpaquete parece permitir esto: github.com/clauswilke/ggtext#markdown-in-theme-elements
Jon Spring

Respuestas:

7

No proporcionaste una reprex, así que necesito inventar algo. Probablemente lo haría así.

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()

Creado el 03/11/2019 por el paquete reprex (v0.3.0)

Claus Wilke
fuente
Gracias, esto funcionó muy bien! Quería preguntar si era posible mostrar dos imágenes en la misma barra aquí (supongo que jugando con el valor hjust) al tener algo como esto: ggplot (data, aes (animal, count, fill = animal, image = image & x))
Pedro Guizar
Publique una pregunta de nivel superior por separado para esto.
Claus Wilke
Acabo de hacerlo @Claus Wilke stackoverflow.com/questions/58793147/…
Pedro Guizar
Esto es muy útil ¿Existe un plan para obtener ggtextures en CRAN?
stevec
No. Ahora hay ggpattern que es mucho más poderoso. github.com/coolbutuseless/ggpattern
Claus Wilke