迈出脚步
体验世界

【R学习笔记】使用R语言调用ggplot2做出漂亮的分组柱状统计图

我是标题党,图做的很丑,因为刚开始学,只是会做而已,用Excel也能做出比下面好看很多的图来,不过新手嘛,先学会个功能,做个记录以备忘

我写程序有个非常大的毛病,每次学习写代码时,都喜欢在一个脚本里面反复覆盖写,这样就会导致,下次我打开写新的东西的时候,就会删掉前面写的东西,等以后突然某一天要用到之前写的一段代码的时候,就找不到了。而很多时候我刚开始入手学习的东西,几乎都是为了解决我的一些实际问题,所以后面会我也会频繁的用到,所以干脆更新到博客上,以后要用的时候也能翻一翻。

如下图



项目背景开了几个淘宝店,找了两个客服,之前每个月发工资的时候,都只是在心理估算了一下每个人的工作量,然后凭感觉发,多少会有点有失偏颇吧,正好到了月初,要发上个月的工资了,最近又在学习R,就想着把客服们的工作量精确一下。


刚开始用barplot来做的图,做出来感觉一看就是那种很古老的刺眼的颜色,怎么看怎么不爽,后来想想,还是用ggplot2来做(上面说的大毛病体现出来了,我已经删掉了barplot方法做图的代码了……),而直接驱使我放弃barplot,转而使用ggplot2的原因就是,barplot做出的图,无法再柱子上面标注数字(也可能是我没找到怎么标注,但是看官方文档确实没有这个选项)

其中一个店铺的数据如下,其他店铺都是这种格式

接待人数 询单人数 最终付款人数 最终转化率(%) 首响时间(秒) 平响时间(秒) 未回复人数
老板 70 25 9 36 80.03 76.88 8
老板娘 210 50 16 32 81.91 108.05 18
客服1 648 513 98 19.1 226.21 167.07 202
客服2 170 107 31 28.97 118.12 93.08 43
汇总/平均 1098 695 154 22.15 126.57 111.27 271

代码如下

1、读取并整理数据

install.packages("ggplot2")
library(ggplot2)

no6 <- read.csv("D:\\Rstudy\\project\\taobao\\files\\no6.csv", check.names = F,sep=",",head = T, encoding = "GBK", stringsAsFactors = FALSE)

no8 <- read.csv("D:\\Rstudy\\project\\taobao\\files\\no8.csv", check.names = F,sep=",",head = T, encoding = "GBK", stringsAsFactors = FALSE)

no9 <- read.csv("D:\\Rstudy\\project\\taobao\\files\\no9.csv", check.names = F,sep=",",head = T, encoding = "GBK", stringsAsFactors = FALSE)
#因为里面含有中文字符,后面又无需对数据进行mysql处理,所以为了省事,直接用GBK编码读取


store <- c(rep('第6分店',times=5),rep('第8分店',times=5),rep('第9分店',times=5))
role <- rep(c('老板','老板娘','客服1','客服2','总计'),times=3)

jiedai_value <- c(no6[,2],no8[,2],no9[,2])
xundan_value <- c(no6[,3],no8[,3],no9[,3])
xiangying_value <- c(no8[,6],no8[,6],no9[,6])
noreply_value <- c(no8[,8],no8[,8],no9[,8])

jiedai <- data.frame(store,role,jiedai_value)
xundan <- data.frame(store,role,xundan_value)
xiangying <- data.frame(store,role,xiangying_value)
noreply <- data.frame(store,role,noreply_value)

上述数据处理完成之后,以jiedai数据为例,数据如下

2、写出作图函数;因为我们要做四个图,每个图都写一遍ggplot会的话,会比较繁琐,所以可以将作图代码封装为一个函数,后面直接调用即可

至于要怎样美化做出来的图片,就得好好写下面的函数了,每个参数挨个儿去调整,总能调到最好看的

function_bar = function(data,y,title){
  p <- ggplot(data, aes(x = store,y = y,fill = role))+
      #####这部分的position = "dodge",并排肩并肩的柱状图
    
  geom_bar(stat ="identity",width = 0.7,position = "dodge")+   
  scale_fill_manual(values = rep(c("#F8766D","#00BA38","#00BFC4","#B79F00","#619CFF"),times=3))+#########设定颜色
    
  labs(x = "",y = "", title = title)+                        
      ############坐标标签和图片title
    
  geom_text(aes(label = y),position=position_dodge(width = 0.7),size = 4,vjust = -0.25)+ 
      ###########设置柱子上的标签文字,文字的position_dodge(width=0.5)设置,保证分隔宽度。
    
  guides(fill = guide_legend(reverse = F))+                  
      ##############图例顺序反转
    
  theme(plot.title = element_text(size = 30,face = "bold", vjust = 0.5, hjust = 0.5),   
            ######图片title文字大小位置
        
        legend.title = element_blank(),                    
            ##########图例名称为空
        
          legend.text = element_text(size = 15, face = "bold"),        
            ##########图例文字大小
        
        legend.position = 'right',               
            ############图例位置
        
        legend.key.size=unit(0.8,'cm'))             
            #############图例大小
  
  return(p)  #上面将图片做好存为p之后,此处要反馈出p
}

3、对每组数据作图

install.packages("cowplot")
library(cowplot)
#这里需要用到cowplot包,将四张图拼接在一张画布上面

p1 = function_bar(jiedai,jiedai_value,"接待人数")
p2 = function_bar(xundan,xundan_value,"询单人数")
p3 = function_bar(xiangying,xiangying_value,"响应时间(秒)")
p4 = function_bar(noreply,noreply_value,"未回复人数(人)")

plot_grid(p1,p2,p3,p4,ncol = 2)#拼接p1,p2,p3,p4四张图,ncol=2表示两列

接下来需要做的

1、补上barplot办法作图代码

2、通过调整各种参数,将ggplot做出点统计图调整的更好看一点

赞(0) 喜欢我
未经允许不得转载:王威 » 【R学习笔记】使用R语言调用ggplot2做出漂亮的分组柱状统计图
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏