R语言与统计分析数据-R语言-图表-决策-Linux-Python数据科学与R语言

R-ggplot2-Barplot时如何将stack和dodge

2020-02-03  本文已影响0人  TroyShen

目录


0. 问题导入

我们在基于R-ggplot2 进行Barplot 绘制时,通常根据bar的相对位置,可以将其分为 堆叠条形图(stack)或是相邻条形图(dodge),但有时候我们会想绘制如图1所示的图件时,就面临一个需要解决的技术问题:

如何在实现堆叠(stack)的同时,实现不同组类的并列?

图1 问题示意图

1. 示例数据生成

test_data = data.frame(
  Group = rep(LETTERS[1:3],each = 9),
  Type = rep(rep(c('Apple','Grape','Banana'),each = 3),3),
  Parts = rep(rep(c('Root','Flower','Stem'),3),3),
  Value = runif(27,50,100)
)
head(test_data)
  Group  Type  Parts    Value
1     A Apple   Root 61.72425
2     A Apple Flower 68.61941
3     A Apple   Stem 51.22682
4     A Grape   Root 75.63621
5     A Grape Flower 93.75388
6     A Grape   Stem 87.79278

2. 图件初步绘制

2.1 堆叠条形图

如图2,我们基于ggplot2完成了堆叠条形图的绘制,可以按照我们的需求基本通过颜色差异体现出Parts 部分的信息,但无法区别体现出Group的差别。

p1 = ggplot()+
  geom_bar(data = test_data,
           aes(x = Type,y = Value, fill = Parts),
           stat = 'identity',position = 'stack',width = 1,
           color = 'white')+
  theme_bw()
png('plot1.png',
    height = 20,
    width = 20,
    units = 'cm',
    res = 800)
print(p1)
dev.off()
图2 堆叠条形图
2.1 相邻条形图

如图3,由于Test data中各Group对应的横坐标均为c('Apple', 'Banana', 'Grape'),故采用相邻条形图进行数据可视化的时候就会出现一个问题就是各组信息在同一横坐标下互相重叠,无法体现出组间差异。

p2 = ggplot()+
  geom_bar(data = test_data,
           aes(x = Type,y = Value, fill = Parts),
           stat = 'identity',position = 'dodge',width = 1,
           color = 'white')+
  theme_bw()

png('plot2.png',
    height = 20,
    width = 20,
    units = 'cm',
    res = 800)
print(p2)
dev.off()
图3 相邻条形图

3. 同时实现stack与dodge的条形图绘制

与图2-3形成鲜明对比,图4显著解决了图2-3中无法恰当体现组间差异的问题,同时实现了stack与dodge条形图的绘制。

p3 = ggplot()+
  geom_bar(data = test_data,
                 aes(x = Type,y = Value, fill = Parts),
                 stat = 'identity',position = 'stack',width = 1,
                 color = 'white')+
  facet_wrap(~ Group, nrow = 1,strip.position = 'bottom')+
  theme_bw()+
  theme(panel.border = element_rect(color = 'transparent'))+
  theme(panel.spacing = unit(0,'lines'),
        strip.background = element_blank(),
        strip.placement = 'outside')
png('plot3.png',
    height = 10,
    width = 20,
    units = 'cm',
    res = 800)
print(p3)
dev.off()
图4 相邻堆叠条形图

4. 总结

本篇主要解决了以下问题:
** 如何在R中基于geom_bar 同时在一幅图内实现stack与dodge条形图绘制?**

5. 本篇所使用的R-packages(没有的需要通过install.packages('包名')进行安装)

library(gridExtra)
library(grid)
library(ggplot2)

6. 致谢

首先,感谢大家的持续关注,小编会继续努力,持续更新下去的!

大家如果觉得有帮助啊,还麻烦大家关注点赞,也可以扩散到朋友圈,多多引导朋友加入咱们这个简书技术平台, 代码共享推动科研进程, 多谢大家啦~

大家如果在使用本代码的过程有遇到问题的,可以留言评论,也可以私信我哈~~

小编联系方式

最后,祝大家身体健康!!!

7. 号外

为了大家阅读方便,公众号同步发布平台【TheWhoOPs】已上线,欢迎各位小伙伴多多关注哈!


上一篇下一篇

猜你喜欢

热点阅读