Превращение фрейма данных в линейный график в процентах - PullRequest
0 голосов
/ 31 марта 2019

Я пытаюсь преобразовать следующий фрейм данных в гистограмму в процентах.фрейм данных (df) выглядит следующим образом:

enter image description here

Я хочу иметь 2 бара, один до и один после после с каждым принятым составным баром, отклонено и отменено.

Ответы [ 2 ]

0 голосов
/ 31 марта 2019

ИМХО, принятый ответ можно улучшить, чтобы лучше отражать структуру данных ОП

  1. , сохранив порядок столбцов before и after и
  2. путем сохранения заданного порядка строк.

Для достижения этого есть два варианта:

  • Либо превратить категориальные переменные в факторы с уровнями втребуемый порядок
  • или укажите требуемый порядок при построении с использованием scale_discrete().

В приведенном ниже коде используются оба метода:

library(ggplot2)
library(tidyr)
library(dplyr)
df %>%
  mutate(type = forcats::fct_inorder(type)) %>%   # preserve row order
  gather("var", "share", before, after) %>%
  ggplot(aes(x = var, y = share, fill = type)) +
  geom_col(position = "fill") +
  scale_x_discrete(limits = c("before", "after"), name = NULL) +   # specify column order
  scale_y_continuous(labels = scales::percent)

для получения графического эквивалентаданных OP:

enter image description here

Кроме того, geom_col() используется в качестве ярлыка для geom_bar(stat = "identity"), а ось y помечена соответствующим образом.

Данные

Поскольку ОП не предоставил воспроизводимый набор данных, но разместил изображение данных, я использовал онлайновый сервис OCR для преобразования снимка экрана в текст.(Для полноты картины: если вы искали "online ocr" и выбрали случайным образом https://www.newocr.com/, что вначале дает желаемый результат).

Затем результат распознавания был скопирован во фрагмент кода ниже:

df <- readr::read_table2(
"type before after
january 297 237
february 182 67
march 234 34
april 55 117")
0 голосов
/ 31 марта 2019

Вот обобщенный способ получения столбчатой ​​диаграммы в процентах с использованием ваших данных (сгенерированной, потому что я не уверен, что именно вы запрашиваете, как отмечено в моем комментарии выше):

require(tidyverse)
df %>% gather("var", "val", before, after) %>% 
ggplot(aes(x=var, y=val,fill=type)) + 
  geom_bar(stat="identity",position="fill")

Это дает вам это - это то, что вы ищете?

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...