Гистограмма с накоплением, основанная на 4 переменных с помощью ggplot2

У меня есть такой фрейм данных:

nthreads ab_1 ab_2 ab_3 ab_4 ...
1        0    0    0    0    ...
2        1    0    12   1    ...
4        2    1    22   1    ...
8        10   2    103  8    ...

Каждый ab_X представляет разные причины, вызывающие прерывание в моем коде. Я хочу обобщить все причины прерывания в гистограмме, отображающей nthreads и прерывания с разными ab_X, сложенными в каждом столбце.

я могу сделать

ggplot(data, aes(x=factor(nthreads), y=ab_1+ab_2+ab_3+ab_4)) +
  geom_bar(stat="identity")

Но это дает только общее количество прерываний. Я знаю, что существует метод заполнения, но я не могу заставить его работать с непрерывными переменными.


person Manuel    schedule 02.05.2017    source источник


Ответы (2)


Вы должны сначала melt фрейм данных

library(data.table)
dt_melt <- melt(data, id.vars = 'nthreads')
ggplot(dt_melt, aes(x = nthreads, y = value, fill = variable)) + 
    geom_bar(stat = 'identity')
person amatsuo_net    schedule 02.05.2017

Это дает общее количество прерываний, потому что вы добавляете их вместе :)

Сначала вам нужно перевести данные из широкого формата в длинный, т. е. создать один столбец для причин прерывания, а второй — для их значений. Вы можете использовать tidyr::gather для этого. Я также нахожу geom_col более удобным, чем geom_bar:

library(tidyr)
library(ggplot2)
data %>% 
  gather(abort, value, -nthreads) %>% 
  ggplot(aes(factor(nthreads), value)) + 
    geom_col(aes(fill = abort)) + 
    labs(x = "nthreads", y = "count")

Обратите внимание, что из-за диапазона значений некоторые столбцы довольно трудно увидеть, поэтому вы можете подумать о масштабах и, возможно, даже о гранях.

person neilfws    schedule 02.05.2017