Jak wstawiać zdjęcia do poszczególnych pasków na wykresie ggplot

9

Próbuję porównać różne nowości NBA w różnych statystykach i pomyślałem, że wykres wyglądałby świetnie, gdybym mógł dodać twarz gracza na końcu wykresu, jak na wykresach r / dataisbeautiful . Mój kod jest obecnie taki:

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

Tak obecnie wygląda mój wykreslubić

Pedro Guizar
źródło
2
Czy widziałeś ten post na blogu, wygląda on całkiem trafnie: jcarroll.com.au/2019/08/13/ggtext-for-images-as-x-axis-labels
Ben
2
ggtextPakiet wydaje się to pozwolić: github.com/clauswilke/ggtext#markdown-in-theme-elements
Jon Wiosna
Czy to odpowiada na twoje pytanie? W tym obrazy na etykiecie osi w animowanym ggplot2
Tjebo,

Odpowiedzi:

7

Nie podałeś przedrostka, więc muszę coś wymyślić. Prawdopodobnie zrobiłbym to w ten sposób.

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

Utworzono 03.11.2019 przez pakiet reprezentx (v0.3.0)

Claus Wilke
źródło
Dzięki, działało świetnie! Chciałem zapytać, czy możliwe jest wyświetlenie dwóch obrazów na tym samym pasku tutaj (zakładam, że popsułem wartość hjust), mając coś takiego: ggplot (dane, aes (zwierzę, liczba, wypełnienie = zwierzę, image = image & x))
Pedro Guizar
Proszę zamieścić osobne pytanie najwyższego poziomu w tym celu.
Claus Wilke
Właśnie zrobiłem @Claus Wilke stackoverflow.com/questions/58793147/…
Pedro Guizar
To jest bardzo przydatne. Czy istnieje plan uzyskania ggtextures w CRAN?
stevec
Nie. Jest teraz ggpattern, który jest znacznie potężniejszy. github.com/coolbutuseless/ggpattern
Claus Wilke