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


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)


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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.