гистограмма строки freq ggplot2 - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть следующие данные:

dataf <- read.table(text = "index,group,taxa1,taxa2,taxa3,total
                s1,g1,2,5,3,10
                s2,g1,3,4,3,10
                s3,g2,1,2,7,10
                s4,g2,0,4,6,10", header = T, sep = ",")

Я пытаюсь составить столбчатую диаграмму частот данных, чтобы она подсчитывалась по строке (а не по столбцу) для каждого индекса(s1, s2, s3, s4), а затем для каждой группы (g1, g2) каждого таксона.Я только могу понять, как составить график видов одного таксона, но не все три сложены друг на друга.

Вот несколько примеров того, что я пытаюсь сделать:

enter image description here

enter image description here

Они сделаны на листах Google, поэтому они не похожи на ggplot, но было бы легчесделать в r с ggplot2, потому что реальный набор данных больше.

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Вам необходимо изменить форму данных.

Вот мое решение (с разбивкой по участкам)

Для первого графика

library(tidyverse)
##For first plot
prepare_data_1 <- dataf %>% select(index, taxa1:taxa3) %>%
  gather(taxa,value, -index) %>%
  mutate(index = str_trim(index)) %>%
  group_by(index) %>% mutate(prop = value/sum(value))


##Plot 1
prepare_data_1 %>%
  ggplot(aes(x = index, y = prop, fill = fct_rev(taxa))) + geom_col()

enter image description here

Для второго участка

##For second plot
prepare_data_2 <- dataf %>% select(group, taxa1:taxa3) %>%
  gather(taxa,value, -group) %>%
  mutate(group = str_trim(group)) %>%
  group_by(group) %>% mutate(prop = value/sum(value))

##Plot 2
prepare_data_2 %>%
  ggplot(aes(x = group, y = prop, fill = fct_rev(taxa))) + geom_col()

enter image description here

0 голосов
/ 19 декабря 2018
##You need to reshape data before doing that.    
 dfm = melt(dataf, id.vars=c("index","group"), 
            measure.vars=c("taxa1","taxa2","taxa3"),
            variable.name="variable", value.name="values")

 ggplot(dfm, aes(x = index, y = values, group = variable)) + 
        geom_col(aes(fill=variable)) +
        theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.25)) +
        geom_text(aes(label = values), position = position_stack(vjust = .5), size = 3) + theme_gray()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...