Чтобы переставить легенды для каждого набора номеров пациента в R - PullRequest
0 голосов
/ 14 июля 2020

У меня есть данные о 80+ пациентах с почти 5-6 категориями, назначенными им в течение 200-300 дней. Таким образом, у каждого пациента есть 300 дней и название статуса каждого дня. Я хочу создать столбчатый график с накоплением.

Проблема: проблема в том, что ggplot сортирует категории по алфавиту, я хочу отсортировать их точно так же, как в источнике, ТАКЖЕ, если для пациента 1 на 5-й день категория - это «Прием к врачу», и та же категория повторяется на 50-й день, ggplot не различает это и принимает все в одном. Я хотел бы построить график на 50-й день с «Прием к врачу», а также на 5-й день.

Я подсчитал частоту для каждой категории пациентов. Это то, что у меня есть до сих пор:

tibble: 72 x 3
   Category    `Patient Number`     n
   <fct>       <chr>            <int>
 1 AD          Patient 1           34
 2 AD          Patient 2           15
 3 Admin delay Patient 2           30
 4 CC          Patient 2           20
 5 CD          Patient 1           52
 6 CD          Patient 2           88
 7 CP          Patient 1           52
 8 CP10        Patient 1            1
 9 CP11        Patient 1            1
10 CP12        Patient 1            1

Я хочу нанести их на столбчатую диаграмму с разбивкой по оси x, это должно быть номер пациента на оси y, должно быть N (количество) с соответствующей категорией, и это не следует сортировать. У меня 87 пациентов.

Пациент и категория на каждый день: участок

ggplot(data = df, aes(x = `Patient Number`, y = n, fill = as.factor(Category))) + 
  geom_bar(position = position_stack(reverse = TRUE), stat="identity", na.rm = FALSE) +
  scale_fill_discrete(breaks = Category)

Заранее спасибо. Я был бы признателен, если бы кто-нибудь мог это решить.

Изменить:

Вот изображение сюжета, которое вы, @pieterbons, мне предложили:

души @Peterbons

1 Ответ

0 голосов
/ 14 июля 2020

Если я правильно понял первую часть вашего вопроса, вы хотите составить диаграмму с накоплением, которая показывает, какое лечение пациент проходил в какой день. Этого можно достичь, используя geom_tile(), который не агрегирует данные по категориям, как geom_bar(), поэтому вы можете получить одну и ту же категорию несколько раз на графике, если, например, это происходит в день 5 и снова в день 50. См. Ниже небольшой пример, где «AA» возникает в день 1 для пациента «a» и снова в день 3:

library(dplyr)
library(ggplot2)

df <- data.frame(Patient = c("a","a","a","b","b","b"),
                 Day = c(1,2,3,1,2,3),
                 Category = c("AA", "AD", "AA", "CD", "AA", "AD"))

df %>% 
  ggplot(aes(x = Patient, y = Day)) + 
  geom_tile(aes(fill = Category))
...