So fügen Sie Bilder in jede einzelne Leiste in einem ggplot-Diagramm ein

9

Ich versuche, verschiedene NBA-Neulinge in verschiedenen Statistiken zu vergleichen, und ich dachte, das Diagramm würde großartig aussehen, wenn ich das Gesicht des Spielers am Ende des Diagramms hinzufügen könnte, wie in den r / dataisbeautiful-Diagrammen . Mein Code lautet derzeit:

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

So sieht mein Diagramm derzeit ausmögen

Pedro Guizar
quelle
2
Haben Sie diesen Blog-Beitrag gesehen, sieht ziemlich relevant aus: jcarroll.com.au/2019/08/13/ggtext-for-images-as-x-axis-labels
Ben
2
Das ggtextPaket scheint dies zu erlauben: github.com/clauswilke/ggtext#markdown-in-theme-elements
Jon Spring

Antworten:

7

Sie haben keinen Reprex bereitgestellt, also muss ich mir etwas ausdenken. Ich würde es wahrscheinlich so machen.

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

Erstellt am 03.11.2019 durch das reprex-Paket (v0.3.0)

Claus Wilke
quelle
Danke, das hat super funktioniert! Ich wollte fragen, ob es möglich ist, hier zwei Bilder in derselben Leiste anzuzeigen (ich nehme an, indem ich mit dem Just-Wert herumspiele), indem ich so etwas habe: ggplot (data, aes (animal, count, fill = animal, Bild = Bild & x))
Pedro Guizar
Bitte stellen Sie hierzu eine separate Frage der obersten Ebene.
Claus Wilke
Habe gerade @Claus Wilke stackoverflow.com/questions/58793147/…
Pedro Guizar
Das ist sehr nützlich. Gibt es einen Plan, um ggtextures auf CRAN zu bekommen?
Stevec
Nein, es gibt jetzt ggpattern, das viel mächtiger ist. github.com/coolbutuseless/ggpattern
Claus Wilke