Построить горизонтальный график для двух групп, используя положительную ось X в R - PullRequest
1 голос
/ 11 июля 2019

Учитывая следующую матрицу

df <- matrix(c(10,8, 20, 6, 20, 25,"exp", "cnt", "exp","cnt","exp","cnt","gene1","gene1","gene2","gene2","gene3","gene3"), 
nrow=6, dimnames=list(c("1", "2", "3","4","5","6"),c("Abundance", "Group","gene")  )) 

Я хотел бы построить горизонтальную диаграмму для двух групп «exp» и «cnt», разделенных вертикальной линией в нуле, ось Y отображает положительные значения, соответствующие каждому гену, и имя гена на оси x. Вот пример:

barplot

Я попробовал следующий код, используя ggplot, но он не работал.

ggplot(df, aes(x=gene))+
  geom_bar(aes(y=Abundance, fill="exp"), stat="identity")+
  geom_bar(aes(y=-Abundance, fill="cnt"),  stat="identity")+
  scale_fill_manual("Group",values=c(exp="red",cnt="green"))+
  labs(y="Abundance")+coord_flip()

Есть предложения?

1 Ответ

1 голос
/ 11 июля 2019

Ваш код верен, но проблема в том, что вы делаете свои data.frames матрицами. ggplot принимает только data.frames в качестве входных данных. Вторая проблема состоит в том, что матрицы могут содержать только один тип данных, поэтому он преобразует все в символ (таким образом, при попытке сделать Abundance отрицательным) будет выдано сообщение об ошибке

Поместите ваши данные в data.frame, и он будет работать:

library(tidyverse)

df <- tibble(Abundance = c(10, 8, 20, 6, 20, 25), 
             Group = c("exp", "cnt", "exp", "cnt", "exp", "cnt"),
             gene = rep(paste0("gene", 1:3), each = 2))
df
#> # A tibble: 6 x 3
#>   Abundance Group gene 
#>       <dbl> <chr> <chr>
#> 1        10 exp   gene1
#> 2         8 cnt   gene1
#> 3        20 exp   gene2
#> 4         6 cnt   gene2
#> 5        20 exp   gene3
#> 6        25 cnt   gene3

ggplot() + 
    geom_bar(data = filter(df, Group == "cnt"), 
             aes(x = gene, y = Abundance, fill = Group),
             stat = 'identity', position = 'stack') + 
    geom_bar(data = filter(df, Group == "exp"), 
             aes(x = gene, y = -Abundance, fill = Group), 
             stat = 'identity', position = 'stack') + 
    coord_flip() + 
    geom_hline(yintercept = 0, linetype = "dashed")

Создано в 2019-07-11 пакетом Представление (v0.3.0)

...