2017-02-17 78 views
1

我创建了2个条形图,第一个高度是我想用不同颜色显示的3个值的总和。我可以创建如图所示的情节:结合堆积和并排条形图

library(reshape) 
library(ggplot2) 
data1 <- data.frame("Year" = c(2011, 2012, 2013, 2014, 2015, 2016), 
         "Item1" = c(47.3, 46.3, 49.9, 50.1, 50.9, 47.2), 
         "Item2" = c(26.9, 58.9, 2.0, 11.5, 11.5, 5.3), 
         "Item3" = c(25.8, 24.9, 24.9, 25.4, 25.3, 25.6)) 
mdata <- melt(data1, id.var = "Year") 
plot(ggplot(mdata, aes(x = Year, y = value, fill = variable)) + 
    geom_bar(stat = "identity")) 

我的第二个情节更容易,只是一个酒吧的价值决定了酒吧的高度。代码生成情节是:

data2 <- data.frame("Year" = c(2011, 2012, 2013, 2014, 2015, 2016), 
         "Value" = c(85.1, 83.4, 86.9, 87.6, 88.4, 85.6)) 
plot(ggplot(data2, aes(x = Year, y = Value)) + 
    geom_bar(stat = "identity")) 

我想显示在同一地块一侧这两杆侧,因此,2011年被分组,2012年分组,等我想不出如何添加第二个图。任何帮助?谢谢!

+1

只是为了澄清,你正在寻找沿x轴的年份,并且每年你会喜欢2个酒吧:一个酒吧是3个值的总和,一个是单个酒吧?如果这是正确的,那么需要将这3个值分解为不同的颜色,或者是否足以将总和显示为一个条? – BLT

+0

@BLT请参阅:http://stackoverflow.com/questions/11604070/issue-with-ggplot2-geom-bar-and-position-dodge-stacked-has-correct-y-values#11620735,似乎我们可以'同时拥有'position ='dodge''和''stack'',这是有道理的。那个答案很古老,我不知道的东西可能已经改变 – GGamba

+0

@GGamba是的,这是基本相同的问题,我的答案是“试图在绘图之前先聚合项目#”。 – BLT

回答

0

感谢大家的反馈。基于这些答案,我选择稍微改变我的方法,并使用线图代替第二个条形图。这传达了相同的信息,只是不是我原本想要的。再次感谢!

0

您可以添加分组列并根据离散比例绘制它们。

data3 <- merge(data1, data2, by = 'Year') 
data3 <- melt(data3, id.var = 'Year') 
data3$gr <- paste0(data3$Year, ifelse(data3$variable == 'Value', '.b', '.a')) 

ggplot(data3, aes(x = gr, y = value, fill = variable)) + 
    geom_col() 

或者使用dplyr,如果你想管就直接通过

data1 %>% full_join(data2) %>% 
    gather(Item, value, -Year) %>% 
    mutate(gr = paste0(Year, ifelse(Item == 'Value', '.b', '.a'))) %>% 

    ggplot(aes(x = gr, y = value, fill = Item)) + 
    geom_col() 

这会给绘图躲闪的外观,同时叠加。但是,一个缺点是Y轴上的标签反映了分组变量而不是年份。我以前试过改变这些,但还没有弄明白。

enter image description here