快速帮助创建堆积条形图(ggplot2)

时间:2011-01-26 23:24:39

标签: r ggplot2

我有以下数据框:

  

> DF
  Year Metric MWh
  2003 Demand 498343
  2004 Demand 1250904
  2005 Demand 1665176
  2006 Demand 2317643
  2007 Demand 2455311
  2008 Demand 3557987
  2009 Demand 4268125
  2010 Demand 5403704
  2011 Demand 6596158
  2012 Demand 7814387
  2013 Demand 9008863
  2014 Demand 10291085
  2015 Demand 11796549
  2003 Actual 159677
  2004 Actual 192748
  2005 Actual 248844
  2006 Actual 372661
  2007 Actual 705656
  2008 Actual 838721
  2009 Actual 1188242
  2010 Actual 1708979
  2011 Actual 0
  2012 Actual 0
  2013 Actual 0
  2014 Actual 0
  2015 Actual 0
  2003 High 0
  2004 High 0
  2005 High 0
  2006 High 0
  2007 High 0
  2008 High 0
  2009 High 0
  2010 High 0
  2011 High 3631730
  2012 High 5729024
  2013 High 6741785
  2014 High 9342798
  2015 High 11094798
  2003 Low 0
  2004 Low 0
  2005 Low 0
  2006 Low 0
  2007 Low 0
  2008 Low 0
  2009 Low 0
  2010 Low 0
  2011 Low 1637220
  2012 Low 1850615
  2013 Low 2064011
  2014 Low 2277406
  2015 Low 2490801

我想用以下方法创建一个非常简单的堆积条形图:
- x轴:年份
- y轴:MWh
- 具有按需,高,低和实际('公制')的1个堆栈,按此顺序堆叠在一起(相对于顶部)。到目前为止,我只是想弄清楚如何使用彼此堆叠的值来做到这一点:

  

DF$'Metric <- factor(DF$'Metric',levels=c("Demand","High","Low","Actual"))

     

qplot(x=Year,data=DF,geom="bar",weight=MWh,fill=Metric)
  #OR
  ggplot(DF,aes(x=factor(Year),y=MWh,fill=factor(Metric))) + geom_bar(position="stack")

基本上,我正在寻找的是每年一个单一的栏,其中“需求”值最高,而较低的值(按照上面的顺序)被叠加。我相信我必须在某处使用position="fill",但我不知道该把它放在哪里。基本上,我要表明的是,需求将稳步上升,而供应(实际与预期的低增长与预计的高增长)无法以非常简单,紧凑的图形来满足需求。如果这是不可能的,也许最好简单地将它们并排分组?

非常感谢任何帮助!!谢谢!

2 个答案:

答案 0 :(得分:17)

我不确定你想要绘制什么,但是从position="fill"我有一个印象,你想要绘制每年度量的相对比例。这可以通过以下方式轻松完成。

正在加载数据:

DF <- dput(DF)
structure(list(Year = c(2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 
2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 2015L, 2003L, 2004L, 
2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 
2014L, 2015L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 
2010L, 2011L, 2012L, 2013L, 2014L, 2015L, 2003L, 2004L, 2005L, 
2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 
2015L), Metric = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("Demand", 
"High", "Low", "Actual"), class = "factor"), MWh = c(498343L, 
1250904L, 1665176L, 2317643L, 2455311L, 3557987L, 4268125L, 5403704L, 
6596158L, 7814387L, 9008863L, 10291085L, 11796549L, 159677L, 
192748L, 248844L, 372661L, 705656L, 838721L, 1188242L, 1708979L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 3631730L, 
5729024L, 6741785L, 9342798L, 11094798L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 1637220L, 1850615L, 2064011L, 2277406L, 2490801L)), .Names = c("Year", 
"Metric", "MWh"), row.names = c(NA, -52L), class = "data.frame")

绘制具有相同高度(百分比)的堆积条形图:

ggplot(DF,aes(x=factor(Year),y=MWh,fill=factor(Metric))) + 
    geom_bar(position="fill")

enter image description here

我可能会误解你想要绘制的内容,并且可以通过指定网格视口在同一图片中绘制两个不同的图形。我建议您查看gridextra包,尤其是arrange

答案 1 :(得分:4)

position="identity"根本不会移动条形图(与默认堆叠相反),因此它们将被覆盖。你必须注意因子水平的排序,因为这样酒吧可以隐藏在彼此之后。

 ggplot(DF,aes(x=factor(Year),y=MWh,fill=factor(Metric))) + geom_bar(position="identity")