Быстрая помощь в создании гистограммы с накоплением (ggplot2) - PullRequest
6 голосов
/ 27 января 2011

У меня есть следующий фрейм данных:

> 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

IВы хотите создать очень простую столбчатую диаграмму со стеками:
- ось X: год
- ось Y: МВтч
- 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 ]

17 голосов
/ 27 января 2011

Я не уверен, что вы действительно хотели бы построить, но из 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.

4 голосов
/ 27 января 2011

position="identity" не будет перемещать бары вообще (в отличие от стандартной укладки), поэтому они будут наложены.Вы должны следить за порядком уровней факторов, потому что таким образом бары могут скрываться друг за другом.

 ggplot(DF,aes(x=factor(Year),y=MWh,fill=factor(Metric))) + geom_bar(position="identity")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...