2013-08-22 2 views
1

Я искал по всему Интернету и не могу найти такой пример, как мой. У меня есть данные, такие как следующие:2 уровня группы с ggplot2

     Formación En consolidación Consolidado 

Ene-Abr 2009 Meta  40   30     30 

       Realizado 35   45     20 

May-Ago 2009 Meta  35   35     30 

       Realizado 34   45     20 

Sep-Dic 2009 Meta  30   30     40 

       Realizado 20   40     20 

и мне нужно столбчатая диаграмма, как следующее:

http://imageshack.us/photo/my-images/90/efk6.png/

Обратите внимание, что график имеет две группы уровня.

ответ

0

Я не мог найти пример точно, как у вас, но я могу дать вам несколько идей, которые могли бы помочь вам на вашем пути туда:

к сопутствующей группе баров, то ggplot2 пакета предлагает две возможности:

  1. Позиция две связанных бары рядом друг с другом, используя команду geom_bar(position="dodge"), как здесь: http://www.cookbook-r.com/Graphs/Bar_and_line_graphs_(ggplot2)/#bar-graphs

  2. связанных групп баров под общим заголовком, используя facet_grid(...) (в cookbook-r вы можете найти дополнительную информацию об этом в разделе Index >> Graphs >> Facets (ggplot2)).

Если вы решите использовать ggplot2, вы можете попробовать example(geom_bar), который также даст вам несколько примеров того, как штабелях участки могут быть созданы (например, с помощью position="fill", который даст вам столбчатую диаграмму как и выше).

К сожалению, я не знаю, как обращаться с такими сложными данными, как ваши, в сочетании с графикой. Но пакет reshape мне очень помог, когда мне нужно было преобразовать свои данные, например. используя функцию melt(), как он используется здесь: http://www.cookbook-r.com/Manipulating_data/Converting_data_between_wide_and_long_format/

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

Markus

3

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

> df 
     Periodo  Grupo Formacion En.consolidacion Consolidado 
1 Ene-Abr.2009  Meta  40    30   30 
2 Ene-Abr.2009 Realizado  35    45   20 
3 May-Ago.2009  Meta  35    35   30 
4 May-Ago.2009 Realizado  34    45   20 
5 Sep-Dic.2009  Meta  30    30   40 
6 Sep-Dic.2009 Realizado  20    40   20 

(. Вместо пробелов, я использовал точки в именах переменных) После этого, легко используя melt() из plyr пакета и facet_wrap:

library(ggplot2) 
library(plyr) 

m=melt(df) 
ggplot(m,aes(x=factor(Grupo),y=value,fill=factor(variable))) + 
    geom_bar(position="fill", stat="identity") + 
    scale_y_continuous(labels = percent, 
        breaks=c(0.2,0.4,0.6,0.8,1)) + # you can set the breaks to whatever you want 
    facet_wrap(~ Periodo) 

ли это то, что вы хотите?

enter image description here

Вот ваш (редактировать) данные:

df = structure(list(Periodo = structure(c(1L, 1L, 2L, 2L, 3L, 3L), .Label = c("Ene-Abr.2009", 
"May-Ago.2009", "Sep-Dic.2009"), class = "factor"), Grupo = structure(c(1L, 
2L, 1L, 2L, 1L, 2L), .Label = c("Meta", "Realizado"), class = "factor"), 
    Formacion = c(40L, 35L, 35L, 34L, 30L, 20L), En.consolidacion = c(30L, 
    45L, 35L, 45L, 30L, 40L), Consolidado = c(30L, 20L, 30L, 
    20L, 40L, 20L)), .Names = c("Periodo", "Grupo", "Formacion", 
"En.consolidacion", "Consolidado"), class = "data.frame", row.names = c(NA, 
-6L)) 
Смежные вопросы