Как отсортировать двойную полосу с помощью ggplot в r? - PullRequest
0 голосов
/ 09 мая 2020

Я изучаю r, и у меня проблема с сортировкой двойной полосы в порядке возрастания или убывания, и я хочу установить легенду только в верхней части графика с двумя цветами, представляющими соответственно одну строку и два столбца, например, например:

Заголовок Time

цвет коробки Breakfast цвет коробки Dinner

И график здесь

Вот мой фрейм данных:

dat <- data.frame(
  time = factor(c("Breakfast","Breakfast","Breakfast","Breakfast","Breakfast","Lunch","Lunch","Lunch","Lunch","Lunch","Lunch","Dinner","Dinner","Dinner","Dinner","Dinner","Dinner","Dinner"), levels=c("Breakfast","Lunch","Dinner")),
  class = c("a","a","b","b","c","a","b","b","c","c","c","a","a","b","b","b","c","c"))

И вот мой код для внесения изменений:

dat %>% 
  filter(time %in% c("Breakfast", "Dinner")) %>%
  droplevels %>%
  count(time, class) %>% 
  group_by(time) %>% 
  mutate(prop = n/sum(n)) %>%
  ggplot(aes(x = class, y = prop, fill = time, label = scales::percent(prop))) +
  geom_col(position = 'dodge') +
  geom_text(position = position_dodge(width = 0.9), vjust = 0.5, size = 3) + 
  scale_y_continuous(labels = scales::percent)+
  coord_flip()

Любая помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 09 мая 2020

Что-то вроде этого должно быть близко к тому, о чем вы спрашиваете, не стесняйтесь спрашивать больше

Ресурсы, на которые обращались во время ответа: http://www.sthda.com/english/wiki/ggplot2-legend-easy-steps-to-change-the-position-and-the-appearance-of-a-graph-legend-in-r-software

Использование части ответ вы можете посмотреть далее в https://ggplot2.tidyverse.org/reference/theme.html

library(tidyverse)

dat <- data.frame(
  time = factor(c("Breakfast","Breakfast","Breakfast","Breakfast","Breakfast","Lunch","Lunch","Lunch","Lunch","Lunch","Lunch","Dinner","Dinner","Dinner","Dinner","Dinner","Dinner","Dinner"), levels=c("Breakfast","Lunch","Dinner")),
  class = c("a","a","b","b","c","a","b","b","c","c","c","a","a","b","b","b","c","c"))


dat %>% 
  filter(time %in% c("Breakfast", "Dinner")) %>%
  droplevels %>%
  count(time, class) %>% 
  group_by(time) %>% 
  mutate(prop = n/sum(n)) %>%
  ggplot(aes(x = fct_reorder(class,prop), y = prop, fill = time, label = scales::percent(prop))) +
  geom_col(position = 'dodge') +
  geom_text(position = position_dodge(width = 0.9), vjust = 0.5, size = 3) + 
  scale_y_continuous(labels = scales::percent)+
  coord_flip() +
  labs(x = "class",fill = "Time") +
  theme(legend.position = "top", legend.direction="vertical", legend.title=element_text(hjust = 0.5,face = "bold",size = 12))

Создано 08.05.2020 представителем пакет (v0.3.0)

1 голос
/ 09 мая 2020

Чтобы получить заголовок легенды над ключом легенды, требуется немного дополнительных настроек темы и руководств.

dat %>% 
  filter(time %in% c("Breakfast", "Dinner")) %>%
  droplevels %>%
  count(time, class) %>% 
  group_by(time) %>% 
  mutate(prop = n/sum(n)) %>%
  ggplot(aes(x = class, y = prop, fill = time, label = scales::percent(prop))) +
  geom_col(position = 'dodge') +
  geom_text(position = position_dodge(width = 0.9), vjust = 0.5, size = 3) + 
  scale_y_continuous(labels = scales::percent)+
  coord_flip() +
  theme(legend.position="top", legend.direction="vertical", legend.title=element_text(hjust = 0.5))+
  guides(fill = guide_legend(title = "Time", nrow = 1))

enter image description here

...