2016-05-06 4 views
2

У меня есть такой набор данных.Баретки с использованием расплава и ggplot

> ds 
      domanda esito cella 
    22870 22870  B 3 
    22893 22893  R 4 
    16258 16258  P 2 
    14684 14684  P 2 
    12873 12873  B 1 
    12933 12933  B 2 
    12047 12047  R 2 
    22880 22880  B 3 
    11479 11479  P 3 
    20836 20836  B 3 

Мне нужно производить график, где по оси х-у меня есть элементы «Селл» (от 1 до 49, я показал вам только часть его). Для каждой ячейки я хочу полосу, состоящую из трех цветов, в зависимости от соответствующих элементов P, B, R. Например, на клетке 2 я хочу полосу длиной 4, цветной фиолетовый (2 единицы), синий (1 единица) и красный (1 единица). Я знаю, что могу использовать функцию melt, а затем ggplot (с), но я не получаю то, что хочу. Кто-то может помочь?

То, что я пробовал:

> this.col 
[1] 2 1 3 3 2 2 1 2 3 2 

Начиная с этого файла цветов (полученных колонке "Esito") я сделал следующее:

ds_som.m = melt(ds_som[,2:3],id=c("cella")) 

ggplot(data=ds_som.m, aes(x=ds_som.m$cella, y=ds_som.m$value, 
            fill=ds_som.m$variable,col=this.col))+ 
    geom_bar(stat = "identity")+ 
    scale_fill_brewer(direction=-1)+ 
    guides(fill = guide_legend(title = "Esiti", title.position = "top")) 
+1

Вы хотите штабелироваться? Можете ли вы показать, что вы пробовали? – mtoto

+1

не очевидно, что вам нужно «расплавить» данные. Но убедитесь, что cella является фактором –

ответ

3

Мы можем попробовать

library(dplyr) 
library(ggplot2) 
ds[-1] %>% 
    group_by(cella) %>% 
    mutate(n =n()) %>% 
    unique() %>% 
    ggplot(., aes(x= cella, y=n, fill=esito)) + 
     geom_bar(stat='identity', position='dodge') 
+1

Wondeful code! Он работает очень хорошо (я только что удалил «position = 'dodge» на geom_bar, потому что предпочитаю видеть длину баров). –