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


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)


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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.