R StackedBar Chart - PullRequest
       34

R StackedBar Chart

0 голосов
/ 25 апреля 2019

Если это мой набор данных.

   Surgery   Surv_Prob            Group
   CV          0.5113        Diabetic
   Hip         0.6619        Diabetic
   Knee        0.6665        Diabetic
   QFox        0.7054        Diabetic

   CV          0.5113    Non-Diabetic
   Hip         0.6629    Non-Diabetic
   Knee        0.6744    Non-Diabetic
   QFox        0.7073    Non-Diabetic

Как мне построить график в виде столбчатых столбцов, как показано ниже.

enter image description here

Обратите внимание, что значения уже носят кумулятивный характер, поэтому график должен показывать очень небольшое увеличение от CV до бедра (delta = 0,6619- 0,5113)

И порядок должен быть CV -> Hip -> Knee -> QFox

1 Ответ

2 голосов
/ 25 апреля 2019

Может быть способ, которым вы можете напрямую построить кумулятивные значения, однако один из способов - получить фактическое значение и построить столбчатую диаграмму с накоплением, упорядочив данные Surgery в нужном вам порядке, используя factor.Для factor уровней я использовал для удобства rev(unique(Surgery)), так как вы хотите упорядочить их в порядке, обратном порядку их появления в наборе данных.Для более сложных типов вам может понадобиться добавить levels вручную.

library(tidyverse)

df %>%
  group_by(Group) %>%
  mutate(Surv_Prob1 = c(Surv_Prob[1], diff(Surv_Prob)), 
         Surgery = factor(Surgery, levels = rev(unique(Surgery)))) %>%
  ggplot() + aes(Group, Surv_Prob1, fill = Surgery, label = Surv_Prob) +
  geom_bar(stat = "identity") + 
  geom_text(size = 3, position = position_stack(vjust = 0.5))

enter image description here

данные

df <- structure(list(Surgery = structure(c(1L, 2L, 3L, 4L, 1L, 2L, 
3L, 4L), .Label = c("CV", "Hip", "Knee", "QFox"), class = "factor"), 
Surv_Prob = c(0.5113, 0.6619, 0.6665, 0.7054, 0.5113, 0.6629, 
0.6744, 0.7073), Group = structure(c(1L, 1L, 1L, 1L, 2L, 
2L, 2L, 2L), .Label = c("Diabetic", "Non-Diabetic"), class = 
"factor")), class = "data.frame", row.names = c(NA, -8L))
...