2017-05-31 116 views
2

还没有看到这个问题的答案,但我觉得它应该是相对简单的。堆积和分组条形图

library(ggplot2) 
Hotels<-data.frame(Year=c(2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 
         2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 
         2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 
         2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 
         2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013), 
       Day=c('Monday', 'Monday', 'Monday', 'Monday', 'Tuesday', 'Tuesday', 'Tuesday', 'Tuesday', 'Wednesday', 'Wednesday', 'Wednesday', 'Wednesday', 'Thursday', 'Thursday', 'Thursday', 'Thursday', 'Friday', 'Friday', 'Friday', 'Friday', 'Saturday', 'Saturday', 'Saturday', 'Saturday', 
         'Monday', 'Monday', 'Monday', 'Monday', 'Tuesday', 'Tuesday', 'Tuesday', 'Tuesday', 'Wednesday', 'Wednesday', 'Wednesday', 'Wednesday', 'Thursday', 'Thursday', 'Thursday', 'Thursday', 'Friday', 'Friday', 'Friday', 'Friday', 'Saturday', 'Saturday', 'Saturday', 'Saturday', 
         'Monday', 'Monday', 'Monday', 'Monday', 'Tuesday', 'Tuesday', 'Tuesday', 'Tuesday', 'Wednesday', 'Wednesday', 'Wednesday', 'Wednesday', 'Thursday', 'Thursday', 'Thursday', 'Thursday', 'Friday', 'Friday', 'Friday', 'Friday', 'Saturday', 'Saturday', 'Saturday', 'Saturday', 
         'Monday', 'Monday', 'Monday', 'Monday', 'Tuesday', 'Tuesday', 'Tuesday', 'Tuesday', 'Wednesday', 'Wednesday', 'Wednesday', 'Wednesday', 'Thursday', 'Thursday', 'Thursday', 'Thursday', 'Friday', 'Friday', 'Friday', 'Friday', 'Saturday', 'Saturday', 'Saturday', 'Saturday', 
         'Monday', 'Monday', 'Tuesday', 'Tuesday', 'Wednesday', 'Wednesday', 'Thursday', 'Thursday', 'Friday', 'Friday', 'Saturday', 'Saturday'), 
       Code=c('Block', 'Added', 'Pickup Conrad', 'Pickup Other', 'Block', 'Added', 'Pickup Conrad', 'Pickup Other', 'Block', 'Added', 'Pickup Conrad', 'Pickup Other', 'Block', 'Added', 'Pickup Conrad', 'Pickup Other', 'Block', 'Added', 'Pickup Conrad', 'Pickup Other', 'Block', 'Added', 'Pickup Conrad', 'Pickup Other', 
         'Block', 'Added', 'Pickup Conrad', 'Pickup Other', 'Block', 'Added', 'Pickup Conrad', 'Pickup Other', 'Block', 'Added', 'Pickup Conrad', 'Pickup Other', 'Block', 'Added', 'Pickup Conrad', 'Pickup Other', 'Block', 'Added', 'Pickup Conrad', 'Pickup Other', 'Block', 'Added', 'Pickup Conrad', 'Pickup Other', 
         'Block', 'Added', 'Pickup Conrad', 'Pickup Other', 'Block', 'Added', 'Pickup Conrad', 'Pickup Other', 'Block', 'Added', 'Pickup Conrad', 'Pickup Other', 'Block', 'Added', 'Pickup Conrad', 'Pickup Other', 'Block', 'Added', 'Pickup Conrad', 'Pickup Other', 'Block', 'Added', 'Pickup Conrad', 'Pickup Other', 
         'Block', 'Added', 'Pickup Conrad', 'Pickup Other', 'Block', 'Added', 'Pickup Conrad', 'Pickup Other', 'Block', 'Added', 'Pickup Conrad', 'Pickup Other', 'Block', 'Added', 'Pickup Conrad', 'Pickup Other', 'Block', 'Added', 'Pickup Conrad', 'Pickup Other', 'Block', 'Added', 'Pickup Conrad', 'Pickup Other', 
         'Block', 'Pickup', 'Block', 'Pickup', 'Block', 'Pickup','Block', 'Pickup', 'Block', 'Pickup', 'Block', 'Pickup'), 
       Count=c(0,0,2,0,42,0,47,0,159,12,166,17,174,12,182,17,22,0,27,0,0,0,8,0, 
         0,0,3,0,10,30,39,0,127,30,174,18,142,30,203,21,20,0,25,9,0,0,13,0, 
         0,0,4,0,45,0,32,2,145,20,137,8,160,20,161,8,20,0,22,8,0,0,4,0, 
         0,0,5,0,0,8,21,1,59,45,110,25,109,8,126,28,19,2,16,0,0,0,9,0, 
         0,0,0,15,84,102,109,119,19,11,0,4)) 
HotelBar<-ggplot(data=Hotels, aes(x=Day, y=as.numeric(Count), fill=Code))+ 
     geom_bar(aes(fill=Code), position="dodge", stat="identity")+ 
     scale_x_discrete(limits=c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"))+ 
     facet_grid(Year~.) 

HotelBar 

Bar Chart

我想一个简单的(英语?)表面上的变化。而不是每个工作日有四个酒吧,我只想要两个。我想把酒吧堆叠在一起。也就是说,我希望看到“Block”栏上的“已添加”栏堆叠在上面,我希望看到“Pickup Conrad”栏中的“Pickup Other”栏堆叠在它上面(无需担心2013年)。

也许我可以为上面提到的两个条形中的每一个创建一个新的变量total,然后用一个表示Block,Added,Pick Conrad和Pickup Other的变量填充这个总数来显示堆叠的外观?

+1

检查这一个 - https://stackoverflow.com/a/18774972/4978581 –

+0

谢谢@迈克尔基什内尔。我看到那篇文章,我不确定它对我的问题有帮助吗?我的数据已经很长。我想我需要添加一个变量,如'Hotels $ Category <-ifelse(酒店$%代码%%c('Block','Added'),“Contract”, ifelse(酒店$代码% Pickup Conrad','Pickup Other','Pickup'),“Actual”,''))',然后用它作为填充变量? –

回答

3

这里是我会怎么做:

# Create a fake variable to group the columns into 2 stacks 
Hotels$code_stack = ifelse(Hotels$Code %in% c('Block','Added'), 'first_stack', 'second_stack') 

# Put the days in the correct order 
Hotels$Day = factor(Hotels$Day, c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")) 

# Display the result... 
# Note the `x=code_stack` to plot two columns 
# Also note `position="stack"` to stack the barcharts 
# The final change of theme removes the x axis 
ggplot(data=Hotels, aes(x=code_stack, y=as.numeric(Count), fill=Code))+ 
    geom_bar(position="stack", stat="identity")+ 
    facet_grid(Year ~ Day) + 
    theme(axis.title.x=element_blank(), 
     axis.text.x=element_blank(), 
     axis.ticks.x=element_blank()) 

其中给出:

enter image description here

+1

@ J.Collins如果有帮助,请考虑upvoting和接受作为答案。 – zx8754