Объединить сложенный и сгруппированный график ggplot2 - PullRequest
1 голос
/ 25 июня 2019

У меня есть эта таблица:

Number  Type    Correction  Adjust  Origin
1061    60-15   Corrected   yes     Small RNA-seq
204     60-15   Corrected   no      Small RNA-seq
0       60-15   Native      yes     Small RNA-seq
540     60-15   Native      no      Small RNA-seq
0       60-30   Corrected   yes     Small RNA-seq
315     60-30   Corrected   no      Small RNA-seq
0       60-30   Native      yes     Small RNA-seq
58      60-30   Native      no      Small RNA-seq
0       70-15   Corrected   yes     Small RNA-seq
200     70-15   Corrected   no      Small RNA-seq
0       70-15   Native      yes     Small RNA-seq
61      70-15   Native      no      Small RNA-seq
0       70-30   Corrected   yes     Small RNA-seq
259     70-30   Corrected   no      Small RNA-seq
0       70-30   Native      yes     Small RNA-seq
42      70-30   Native      no      Small RNA-seq
0       80-15   Corrected   yes     Small RNA-seq
166     80-15   Corrected   no      Small RNA-seq
0       80-15   Native      yes     Small RNA-seq
76      80-15   Native      no      Small RNA-seq
0       80-30   Corrected   yes     Small RNA-seq
182     80-30   Corrected   no      Small RNA-seq
0       80-30   Native      yes     Small RNA-seq
13      80-30   Native      no      Small RNA-seq

И я сгенерировал следующий график в ggplot2, что почти то, что я хочу:

ggplot(Table, aes(fill=Correction, x=Type, y=Number)) +
       geom_bar(position="dodge", stat="identity") +
       scale_fill_brewer(palette = "Set1") + labs(x="", y="") + 
       theme(legend.title=element_blank()) + facet_wrap(~Origin)

, который генерирует фигуру как:

enter image description here

Проблема в том, что я хочу, чтобы первый столбец 60-15 был разделен на два (1061 и 204), как если бы это был столбчатая диаграмма с накоплением. Остальные бары не имеют этой особенности и останутся такими же, как они. Я попытался решить эту проблему, добавив строки с нулевыми числовыми значениями, но не смог найти подходящий код для решения этой проблемы.

Может ли кто-нибудь помочь?

Спасибо

1 Ответ

0 голосов
/ 25 июня 2019

Вы можете попытаться подсчитать суммы раньше. Затем добавьте недостающие части стержня самостоятельно, используя geom_rect

library(tidyverse)
df %>% 
  group_by(Type, Correction) %>% 
   summarise(count=sum(Number))
# A tibble: 12 x 3
# Groups:   Type [6]
Type  Correction count
<fct> <fct>      <int>
1 60-15 Corrected   1265
2 60-15 Native       540
3 60-30 Corrected    315
4 60-30 Native        58
5 70-15 Corrected    200
6 70-15 Native        61
7 70-30 Corrected    259
8 70-30 Native        42
9 80-15 Corrected    166
10 80-15 Native        76
11 80-30 Corrected    182
12 80-30 Native        13

df %>% 
  group_by(Type, Correction) %>% 
  summarise(count=sum(Number)) %>% 
  mutate(Correction=factor(Correction, levels = c(levels(Correction), "new_level"))) %>%  
  ggplot(aes(Type, count, fill=Correction)) + 
   geom_col(position = "dodge") +
   geom_rect(aes(xmin=.55, xmax=1, ymin=1061, ymax=1061+204), fill="#619CFF") + 
   scale_fill_discrete(drop=FALSE)

enter image description here

...