Home > other >  reorder stacked barplot based on the value of a group
reorder stacked barplot based on the value of a group

Time:07-11

I have a stacked barplot that I need to order. I was already able to order the different values within each bar, but not to order the bars themself. Basically, I want a descending order based on the n when the variable "value" = "Einen großen Beitrag".

Here is my code and data:

ggplot(F14a, 
       aes(x = name, y = n, fill = value)) 
  geom_col() 
  scale_color_viridis_d(aesthetics = "fill", alpha = 0.8) 
  coord_flip() 
  theme_bw() 
  theme(legend.position = "bottom",
        legend.title = element_text(size=7),
        legend.text=element_text(size=7),
        axis.title.x=element_blank(),
        axis.text.x=element_blank(),
        axis.ticks.x=element_blank()
  )
structure(list(name = c("können Angebote partizipativ \n gestalten.", 
"können Angebote partizipativ \n gestalten.", "können Angebote partizipativ \n gestalten.", 
"können Geflüchtete in ihrer\n Selbstwirksamkeit unterstützen.", 
"können Geflüchtete in ihrer\n Selbstwirksamkeit unterstützen.", 
"können Geflüchtete in ihrer\n Selbstwirksamkeit unterstützen.", 
"können Geflüchtete in ihrer\n Selbstwirksamkeit unterstützen.", 
"können Wirkungen ihrer Arbeit \n reflektieren und Angebote \n  dementsprechend anpassen.", 
"können Wirkungen ihrer Arbeit \n reflektieren und Angebote \n  dementsprechend anpassen.", 
"können Wirkungen ihrer Arbeit \n reflektieren und Angebote \n  dementsprechend anpassen.", 
"sind gut über aktuelle \n Entwicklungen in der Migrationsarbeit,\n insbesondere rechtliche Entwicklungen, informiert.", 
"sind gut über aktuelle \n Entwicklungen in der Migrationsarbeit,\n insbesondere rechtliche Entwicklungen, informiert.", 
"sind mit Fachpersonen anderer\n  Organisationen gut vernetzt.", 
"sind mit Fachpersonen anderer\n  Organisationen gut vernetzt.", 
"sind mit Kolleginnen und \n Kollegen aus anderen DRK-Gliederungen \n gut vernetzt.", 
"sind mit Kolleginnen und \n Kollegen aus anderen DRK-Gliederungen \n gut vernetzt.", 
"sind mit Kolleginnen und \n Kollegen aus anderen DRK-Gliederungen \n gut vernetzt.", 
"sind sich ihres Handlungs- \n rahmens bewusst.", "sind sich ihres Handlungs- \n rahmens bewusst.", 
"sind sich ihres Handlungs- \n rahmens bewusst."), value = structure(c(3L, 
2L, 1L, 4L, 3L, 2L, 1L, 4L, 3L, 2L, 4L, 3L, 3L, 2L, 4L, 3L, 1L, 
4L, 3L, 1L), .Label = c("Keine Angabe", "Kompetenz unabhängig vom \nDRK-Generalsekretariat aufgebaut", 
"Einen kleinen Beitrag", "Einen großen Beitrag"), class = "factor"), 
    n = c(6L, 2L, 1L, 4L, 4L, 1L, 1L, 3L, 3L, 2L, 8L, 1L, 4L, 
    2L, 2L, 3L, 1L, 2L, 7L, 1L), percent = c(100, 100, 100, 100, 
    100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 
    100, 100, 100, 100)), class = c("grouped_df", "tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -20L), groups = structure(list(
    name = c("können Angebote partizipativ \n gestalten.", "können Angebote partizipativ \n gestalten.", 
    "können Angebote partizipativ \n gestalten.", "können Geflüchtete in ihrer\n Selbstwirksamkeit unterstützen.", 
    "können Geflüchtete in ihrer\n Selbstwirksamkeit unterstützen.", 
    "können Geflüchtete in ihrer\n Selbstwirksamkeit unterstützen.", 
    "können Geflüchtete in ihrer\n Selbstwirksamkeit unterstützen.", 
    "können Wirkungen ihrer Arbeit \n reflektieren und Angebote \n  dementsprechend anpassen.", 
    "können Wirkungen ihrer Arbeit \n reflektieren und Angebote \n  dementsprechend anpassen.", 
    "können Wirkungen ihrer Arbeit \n reflektieren und Angebote \n  dementsprechend anpassen.", 
    "sind gut über aktuelle \n Entwicklungen in der Migrationsarbeit,\n insbesondere rechtliche Entwicklungen, informiert.", 
    "sind gut über aktuelle \n Entwicklungen in der Migrationsarbeit,\n insbesondere rechtliche Entwicklungen, informiert.", 
    "sind mit Fachpersonen anderer\n  Organisationen gut vernetzt.", 
    "sind mit Fachpersonen anderer\n  Organisationen gut vernetzt.", 
    "sind mit Kolleginnen und \n Kollegen aus anderen DRK-Gliederungen \n gut vernetzt.", 
    "sind mit Kolleginnen und \n Kollegen aus anderen DRK-Gliederungen \n gut vernetzt.", 
    "sind mit Kolleginnen und \n Kollegen aus anderen DRK-Gliederungen \n gut vernetzt.", 
    "sind sich ihres Handlungs- \n rahmens bewusst.", "sind sich ihres Handlungs- \n rahmens bewusst.", 
    "sind sich ihres Handlungs- \n rahmens bewusst."), value = structure(c(1L, 
    2L, 3L, 1L, 2L, 3L, 4L, 2L, 3L, 4L, 3L, 4L, 2L, 3L, 1L, 3L, 
    4L, 1L, 3L, 4L), .Label = c("Keine Angabe", "Kompetenz unabhängig vom \nDRK-Generalsekretariat aufgebaut", 
    "Einen kleinen Beitrag", "Einen großen Beitrag"), class = "factor"), 
    .rows = structure(list(3L, 2L, 1L, 7L, 6L, 5L, 4L, 10L, 9L, 
        8L, 12L, 11L, 14L, 13L, 17L, 16L, 15L, 20L, 19L, 18L), ptype = integer(0), class = c("vctrs_list_of", 
    "vctrs_vctr", "list"))), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -20L), .drop = TRUE))

CodePudding user response:

library(tidyverse)

F14a <- structure(list(
  name = c(
    "können Angebote partizipativ \n gestalten.",
    "können Angebote partizipativ \n gestalten.", "können Angebote partizipativ \n gestalten.",
    "können Geflüchtete in ihrer\n Selbstwirksamkeit unterstützen.",
    "können Geflüchtete in ihrer\n Selbstwirksamkeit unterstützen.",
    "können Geflüchtete in ihrer\n Selbstwirksamkeit unterstützen.",
    "können Geflüchtete in ihrer\n Selbstwirksamkeit unterstützen.",
    "können Wirkungen ihrer Arbeit \n reflektieren und Angebote \n  dementsprechend anpassen.",
    "können Wirkungen ihrer Arbeit \n reflektieren und Angebote \n  dementsprechend anpassen.",
    "können Wirkungen ihrer Arbeit \n reflektieren und Angebote \n  dementsprechend anpassen.",
    "sind gut über aktuelle \n Entwicklungen in der Migrationsarbeit,\n insbesondere rechtliche Entwicklungen, informiert.",
    "sind gut über aktuelle \n Entwicklungen in der Migrationsarbeit,\n insbesondere rechtliche Entwicklungen, informiert.",
    "sind mit Fachpersonen anderer\n  Organisationen gut vernetzt.",
    "sind mit Fachpersonen anderer\n  Organisationen gut vernetzt.",
    "sind mit Kolleginnen und \n Kollegen aus anderen DRK-Gliederungen \n gut vernetzt.",
    "sind mit Kolleginnen und \n Kollegen aus anderen DRK-Gliederungen \n gut vernetzt.",
    "sind mit Kolleginnen und \n Kollegen aus anderen DRK-Gliederungen \n gut vernetzt.",
    "sind sich ihres Handlungs- \n rahmens bewusst.", "sind sich ihres Handlungs- \n rahmens bewusst.",
    "sind sich ihres Handlungs- \n rahmens bewusst."
  ), value = structure(c(
    3L,
    2L, 1L, 4L, 3L, 2L, 1L, 4L, 3L, 2L, 4L, 3L, 3L, 2L, 4L, 3L, 1L,
    4L, 3L, 1L
  ), .Label = c(
    "Keine Angabe", "Kompetenz unabhängig vom \nDRK-Generalsekretariat aufgebaut",
    "Einen kleinen Beitrag", "Einen großen Beitrag"
  ), class = "factor"),
  n = c(
    6L, 2L, 1L, 4L, 4L, 1L, 1L, 3L, 3L, 2L, 8L, 1L, 4L,
    2L, 2L, 3L, 1L, 2L, 7L, 1L
  ), percent = c(
    100, 100, 100, 100,
    100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
    100, 100, 100, 100
  )
), class = c(
  "grouped_df", "tbl_df", "tbl",
  "data.frame"
), row.names = c(NA, -20L), groups = structure(list(
  name = c(
    "können Angebote partizipativ \n gestalten.", "können Angebote partizipativ \n gestalten.",
    "können Angebote partizipativ \n gestalten.", "können Geflüchtete in ihrer\n Selbstwirksamkeit unterstützen.",
    "können Geflüchtete in ihrer\n Selbstwirksamkeit unterstützen.",
    "können Geflüchtete in ihrer\n Selbstwirksamkeit unterstützen.",
    "können Geflüchtete in ihrer\n Selbstwirksamkeit unterstützen.",
    "können Wirkungen ihrer Arbeit \n reflektieren und Angebote \n  dementsprechend anpassen.",
    "können Wirkungen ihrer Arbeit \n reflektieren und Angebote \n  dementsprechend anpassen.",
    "können Wirkungen ihrer Arbeit \n reflektieren und Angebote \n  dementsprechend anpassen.",
    "sind gut über aktuelle \n Entwicklungen in der Migrationsarbeit,\n insbesondere rechtliche Entwicklungen, informiert.",
    "sind gut über aktuelle \n Entwicklungen in der Migrationsarbeit,\n insbesondere rechtliche Entwicklungen, informiert.",
    "sind mit Fachpersonen anderer\n  Organisationen gut vernetzt.",
    "sind mit Fachpersonen anderer\n  Organisationen gut vernetzt.",
    "sind mit Kolleginnen und \n Kollegen aus anderen DRK-Gliederungen \n gut vernetzt.",
    "sind mit Kolleginnen und \n Kollegen aus anderen DRK-Gliederungen \n gut vernetzt.",
    "sind mit Kolleginnen und \n Kollegen aus anderen DRK-Gliederungen \n gut vernetzt.",
    "sind sich ihres Handlungs- \n rahmens bewusst.", "sind sich ihres Handlungs- \n rahmens bewusst.",
    "sind sich ihres Handlungs- \n rahmens bewusst."
  ), value = structure(c(
    1L,
    2L, 3L, 1L, 2L, 3L, 4L, 2L, 3L, 4L, 3L, 4L, 2L, 3L, 1L, 3L,
    4L, 1L, 3L, 4L
  ), .Label = c(
    "Keine Angabe", "Kompetenz unabhängig vom \nDRK-Generalsekretariat aufgebaut",
    "Einen kleinen Beitrag", "Einen großen Beitrag"
  ), class = "factor"),
  .rows = structure(list(
    3L, 2L, 1L, 7L, 6L, 5L, 4L, 10L, 9L,
    8L, 12L, 11L, 14L, 13L, 17L, 16L, 15L, 20L, 19L, 18L
  ), ptype = integer(0), class = c(
    "vctrs_list_of",
    "vctrs_vctr", "list"
  ))
), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -20L), .drop = TRUE))

F14a |> 
  group_by(name) |> 
  mutate(sort = if_else(value == "Einen großen Beitrag", n, NA_integer_) / sum(n)) |> 
  fill(sort) |> 
  ungroup() |> 
  replace_na(list(sort = 0)) |> 
  mutate(name = fct_reorder(name, sort)) |> 
  ggplot(aes(name, n, fill = value))  
  geom_col()  
  scale_color_viridis_d(aesthetics = "fill", alpha = 0.8)  
  coord_flip()  
  theme_bw()  
  theme(
    legend.position = "bottom",
    legend.title = element_text(size = 7),
    legend.text = element_text(size = 7),
    axis.title.x = element_blank(),
    axis.text.x = element_blank(),
    axis.ticks.x = element_blank()
  )  
  labs(x = NULL)

Created on 2022-07-10 by the reprex package (v2.0.1)

  • Related