我是标题党,图做的很丑,因为刚开始学,只是会做而已,用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数据为例,数据如下
|
store
|
role
|
jiedai_value
|
---|---|---|---|
1 | 第6分店 | 老板 | 0 |
2 | 第6分店 | 老板娘 | 0 |
3 | 第6分店 | 客服1 | 193 |
4 | 第6分店 | 客服2 | 140 |
5 | 第6分店 | 总计 | 333 |
6 | 第8分店 | 老板 | 215 |
7 | 第8分店 | 老板娘 | 326 |
8 | 第8分店 | 客服1 | 876 |
9 | 第8分店 | 客服2 | 311 |
10 | 第8分店 | 总计 | 1728 |
11 | 第9分店 | 老板 | 70 |
12 | 第9分店 | 老板娘 | 210 |
13 | 第9分店 | 客服1 | 648 |
14 | 第9分店 | 客服2 | 170 |
15 | 第9分店 | 总计 | 1098 |
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做出点统计图调整的更好看一点