我在互联网上搜索过,找不到像我这样的例子。我有以下数据:
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
我需要一个如下所示的堆积条形图:
请注意,该图表有两个级别组。
答案 0 :(得分: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)
这是你想要的吗?
以下是您的(已编辑)数据:
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))
答案 1 :(得分:0)
我找不到一个与你完全一样的例子,但我可以给你一些可以帮助你的方法:
要对相关栏进行分组,ggplot2
包提供两种可能性:
使用geom_bar(position="dodge")
命令将两个相关的条彼此相邻放置,如下所示:http://www.cookbook-r.com/Graphs/Bar_and_line_graphs_(ggplot2)/#bar-graphs
使用facet_grid(...)
在一个共同标题下的相关栏组(在cookbook-r中,您可以在索引>>图表>> Facets(ggplot2))下找到更多关于该栏的信息。
如果您决定使用ggplot2
,您可能需要尝试example(geom_bar)
,这也会为您提供一些关于如何创建堆积图的示例(例如,使用position="fill"
,它将为您提供如上所示的堆积条形图。
不幸的是,我不知道如何处理与您的数据一样复杂的数据以及绘图。但是,每当我需要转换数据时,reshape
包对我帮助很大,例如使用melt()
函数,因为它在此处使用:http://www.cookbook-r.com/Manipulating_data/Converting_data_between_wide_and_long_format/
希望我能帮助一点。请随意给我一些反馈意见。
马库斯