Come inserire immagini in ogni singola barra in un grafico ggplot


9

Sto cercando di confrontare diversi rookie NBA tra diverse statistiche e ho pensato che il grafico sarebbe stato bello se avessi potuto aggiungere la faccia del giocatore alla fine del grafico come nei grafici r / dataisbeautiful . Il mio codice è attualmente questo:

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

Questo è l'aspetto del mio grafico al momentopiace


2
Hai visto questo post sul blog, sembra abbastanza rilevante: jcarroll.com.au/2019/08/13/ggtext-for-images-as-x-axis-labels
Ben

2
Il ggtextpacchetto sembra consentire questo: github.com/clauswilke/ggtext#markdown-in-theme-elements
Jon Spring

Risposte:


7

Non hai fornito un reprex, quindi devo inventarmi qualcosa. Probabilmente lo farei così.

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

Creato il 03-11-2019 dal pacchetto reprex (v0.3.0)


Grazie, ha funzionato alla grande! Volevo chiedere se fosse possibile visualizzare due immagini sulla stessa barra qui (sto assumendo facendo confusione con il valore hjust) avendo qualcosa del genere: ggplot (data, aes (animal, count, fill = animal, image = image & x))
Pedro Guizar,

Si prega di inviare una domanda di primo livello separata per questo.
Claus Wilke,


Questo è molto utile C'è un piano per ottenere ggtextures su CRAN?
Stevec

No. Ora c'è ggpattern che è molto più potente. github.com/coolbutuseless/ggpattern
Claus Wilke il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.