R语言ggplot2怎么做10年的移动平均线怎么看

&|&&|&&|&&|&&
当前位置: >
ggplot2-为图形添加直线
作者:tanzuozhev & 来源:转载 &
摘要: 本文更新地址:http://blog.csdn.net/tanzuozhev/article/details/本文在 http://www.cookbook-r.com/Graphs/Scatterplots_(ggplot2)/ 的基础上加入了自己的理解对于连续型数据轴和离散型数据轴#Somesampledata
dat<-read.table(header=TRUE,text=
本文更新地址:http://blog.csdn.net/tanzuozhev/article/details/
本文在&http://www.cookbook-r.com/Graphs/Scatterplots_(ggplot2)/&的基础上加入了自己的理解
对于连续型数据轴和离散型数据轴
dat &- read.table(header=TRUE, text=' cond result control 10 treatment 11.5 ')
library(ggplot2)
bp &- ggplot(dat, aes(x=cond, y=result)) +
geom_bar(position=position_dodge(), stat="identity")
bp + geom_hline(aes(yintercept=12))
bp + geom_hline(aes(yintercept=12), colour="#990000", linetype="dashed")
根据分类情况,添加直线
dat$hline &- c(9,12)
cond result hline
## 2 treatment
bp &- ggplot(dat, aes(x=cond, y=result)) +
geom_bar(position=position_dodge(), stat="identity")
bp + geom_errorbar(aes(y=hline, ymax=hline, ymin=hline), colour="#AA0000")
bp + geom_errorbar(width=0.5,
aes(y=hline, ymax=hline, ymin=hline), colour="#AA0000")
dat_hlines &- data.frame(cond=c("control","treatment"), hline=c(9,12))
dat_hlines
cond hline
## 2 treatment
bp + geom_errorbar(data=dat_hlines, aes(y=hline, ymax=hline, ymin=hline), colour="#AA0000")
直线穿过各组数据
这里实际上是有4条线, 但是前两条线与后两条线的数值相同,看上去是两条线.
dat &- read.table(header=TRUE, text=' cond group result hline control A 10 9 treatment A 11.5 12 control B 12 9 treatment B 14 12 ')
cond group result hline
## 2 treatment
## 4 treatment
bp &- ggplot(dat, aes(x=cond, y=result, fill=group)) +
geom_bar(position=position_dodge(), stat="identity")
bp + geom_errorbar(aes(y=hline, ymax=hline, ymin=hline), linetype="dashed")
每组数据分别划线
dat &- read.table(header=TRUE, text=' cond group result hline control A 10 11 treatment A 11.5 12 control B 12 12.5 treatment B 14 15 ')
bp &- ggplot(dat, aes(x=cond, y=result, fill=group)) +
geom_bar(position=position_dodge(), stat="identity")
bp + geom_errorbar(aes(y=hline, ymax=hline, ymin=hline), linetype="dashed",
position=position_dodge())
为连续型数据轴添加直线
dat &- read.table(header=TRUE, text=' cond xval yval control 11.5 10.8 control 9.3 12.9 control 8.0 9.9 control 11.5 10.1 control 8.6 8.3 control 9.9 9.5 control 8.8 8.7 control 11.7 10.1 control 9.7 9.3 control 9.8 12.0 treatment 10.4 10.6 treatment 12.1 8.6 treatment 11.2 11.0 treatment 10.0 8.8 treatment 12.9 9.5 treatment 9.1 10.0 treatment 13.4 9.6 treatment 11.6 9.8 treatment 11.5 9.8 treatment 12.0 10.6 ')
library(ggplot2)
Basic lines
sp &- ggplot(dat, aes(x=xval, y=yval, colour=cond)) + geom_point()
sp + geom_hline(aes(yintercept=10))
sp + geom_hline(aes(yintercept=10)) +
geom_vline(aes(xintercept=11.5), colour="#BB0000", linetype="dashed")
为均值自动划线
sp + geom_hline(aes(yintercept=10)) +
geom_line(stat="vline", xintercept="mean")
spf &- sp + facet_grid(. ~ cond)
spf + geom_hline(aes(yintercept=10))
如果想为不同的分面, 添加不同的直线, 这里有两种设置. 一种是重新生成一个满足数据需要的 data.frame 另一种是使用&geom_line()&的stat和xintercept
dat_vlines &- data.frame(cond=levels(factor(dat$cond)), xval=c(10,11.5))
dat_vlines
control 10.0
## 2 treatment 11.5
spf + geom_hline(aes(yintercept=10)) +
geom_vline(aes(xintercept=xval), data=dat_vlines,
colour="#990000", linetype="dashed")
spf + geom_hline(aes(yintercept=10)) +
geom_line(stat="vline", xintercept="mean")
版权所有 IT知识库 CopyRight (C)
IT知识库 IT610.com , All Rights Reserved.他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)R语言:ggplot2精细化绘图
我的图书馆
R语言:ggplot2精细化绘图
1、画图前的准备:自定义ggplot2格式刷 2、画图前的准备:数据塑形利器dplyr / tidyr介绍 3、常用的商业用图:
1)简单柱形图+文本(单一变量) 2)分面柱形图(facet_wrap/facet_grid)
3)簇型柱形图(position=”dodge”) 4)堆积柱形图(需要先添加百分比,再对百分比的变量做柱形图) 5)饼图、极坐标图 6)多重线性图
这篇文章其实是我之前的一个延续。因为接了一个活要用R定制化数据报表,其中涉及大量的对图表精雕细琢的工作。在深入研究ggplot2时,深深感觉到用ggplot2画图与用excel画图的不一样。
如果要用ggplot2画图,还是需要了解很多技术细节的。这些细节要么散落在和这两本书里,要么散落在网上。因此在这里以我学习和总结的过程,对ggplot2的精细化画图做一个阐述,介绍我整理后的作图理念。
如果有进一步学习需要的各位,请直接买书或者自己实践学习。很多技术细节需要自己摸索才知道的,祝大家好运。
1、画图前的准备:自定义ggplot2格式刷
在画图前,我们首先定义一下ggplot2格式刷。
首先,ggplot2本身自带了很漂亮的主题格式,如theme_gray和theme_bw。但是在工作用图上,很多公司对图表格式配色字体等均有明文的规定。像我们公司,对主色、辅色、字体等都有严格的规定。如刘万祥老师早期的一篇里,大家更是可以看到,很多商业杂志的图表,配色风格都是非常相近的。因此,修改主题,使其更加适合我们的商业需求,保持图表风格统一,是非常必要的。
虽然ggplot2可以通过代码的追加,细细修改表距、背景色以及字体等框架。但是如果每做一个图,都要如此细调,代码将会非常繁琐,而且万一老板突然兴起要换风格时,代码修改将会非常痛苦。
幸运的是,ggplot2允许我们事先定制好图表样式,我们可以生成如mytheme或者myline这样的有明确配色主题的对象,到时候就像excel的或者,直接在生成的图表里引用格式刷型的主题配色,就可以快捷方便的更改图表内容,保持风格的统一了。
在运行之前,首先加载相关包
library(ggplot2)
library(dplyr)
library(ColorBrewer)
library(tidyr)
library(grid)
#载入格式刷
#定义好字体
windowsFonts(CA=windowsFont("Calibri"))
接下来是一个示范。我首先共享了我常用的一个主题刷,配色参考以下:
主体色:蓝色 085A9C ,红色 EF0808,灰色 526373 辅助色:浅黄色 FFFFE7,橙色 FF9418, 绿色 219431, 明黄色 FF9418,紫色 9C52AD
定制了mytheme, myline_blue, mycolour等多个对象:
1 #定义好字体
2 windowsFonts(CA=windowsFont("Calibri"))
3 #事先定制好要加图形的形状、颜色、主题等
4 #定制主题,要求背景全白,没有边框。然后所有的字体都是某某颜色
5 #定制主题,要求背景全白,没有边框。然后所有的字体都是某某颜色
6 mytheme&-theme_bw()+theme(legend.position="top",
panel.border=element_blank(),
panel.grid.major=element_line(linetype="dashed"),
panel.grid.minor=element_blank(),
plot.title=element_text(size=15,
colour="#003087",
family="CA"),
legend.text=element_text(size=9,colour="#003087",
family="CA"),
legend.key=element_blank(),
axis.text=element_text(size=10,colour="#003087",
family="CA"),
strip.text=element_text(size=12,colour="#EF0808",
family="CA"),
strip.background=element_blank()
23 pie_theme=mytheme+theme(axis.text=element_blank(),
axis.ticks=element_blank(),
axis.title=element_blank(),
panel.grid.major=element_blank())
27 #定制线的大小
28 myline_blue&-geom_line(colour="#085A9C",size=2)
29 myline_red&-geom_line(colour="#EF0808",size=2)
30 myarea=geom_area(colour=NA,fill="#003087",alpha=.2)
31 mypoint=geom_point(size=3,shape=21,colour="#003087",fill="white")
32 mybar=geom_bar(fill="#0C8DC4",stat="identity")
33 #然后是配色,考虑到样本的多样性,可以事先设定颜色,如3种颜色或7种颜色的组合
34 mycolour_3&-scale_fill_manual(values=c("#085A9C","#EF0808","#526373"))
35 mycolour_7&-scale_fill_manual(values=c("#085A9C","#EF0808","#526373",
36 "#FFFFE7","#FF9418","#219431","#9C52AD"))
37 mycolour_line_7&-scale_color_manual(values=c("#085A9C","#EF0808","#526373",
"#0C8DC4","#FF9418","#219431","#9C52AD"))
把以上代码在R里面运行以后,就可以直接使用了。譬如以下:
1)先生成一个简单的图表:
#未使用格式刷
p&-ggplot(iris,aes(x=species,y=sepal_length)) +geom_bar(stat="identity")+ ggtitle("sepal_length by species")
简单地指定x轴为离散型变量species,y为求和,会得到下面的柱形图&
这时候,套用一下之前设置好的主题(mytheme),背景、坐标轴还有字体颜色就相应改变了。
然后,因为之前格式刷部分我设定了一个蓝色的柱形图样式(mybar),这里直接引用的话,就可以直接生成蓝色的柱形图了。
ggplot(iris,aes(x=species,y=sepal_length)) +ggtitle("sepal_length by species")+mybar+mytheme
2、画图前的准备:数据塑形利器dplyr / tidyr
有了事先设定的一些格式刷以后,我们就可以快速有效地作图了。
但是在作图之前,就像excel作图总要先把数据用处理成想要的形式 。在excel里面,我们常用的是数据透视表或者一些公式辅助,而在R里,则是用一些常用的包,如dplyr及tidyr,对数据进行重塑再造
在我之前看的那两本ggplot2的书里,基本用的都是reshape2+plyr的组合。但实际上hadley后续出的dplyr与tidyr更加有用。具体的使用方法,在有介绍,老师还编了一个swirl课程供人使用,安装方法如下。
install.packages("swirl")
library(swirl)
#安装getting and cleaning data相关的课程教学包
install_from_swirl("Getting and Cleaning Data")
其他的也可以参考我
总之,用好dplyr的话,你可以快速的把一些数据,如下面的
随你所欲地汇总(group_by & summarize) 甚至再拆分 (spread),譬如示例里面就是把成交记录按照成交价格和BuySell拆分
data #刚刚演示的那些数据,在预测者网可以下载
data %&% group_by(Price,BuySell) %&% summarize(Money=sum(Money,na.rm=TRUE)) %&% spread(BuySell,Money)
要想做好ggplot2的图,对数据快速进行塑形的方法是我们必须要掌握的。上面的s wirl课程非常有用,而且值得是最新的一个技术方法,值得大家学习。
3、常用的商业用图
接下来分享一下我在这次作图过程中,最常用的几个图形的代码。首先声明,这些图形的进一步做法以及变形,基本都可以在这两本参考书籍里(&|&&)找到。我这里更多的摘取一些我比较常用的图表进行讲解
1、简单柱形图+文本(单一变量) 2、分面柱形图(facet_wrap/facet_grid)
3、簇型柱形图(position=”dodge”) 4、堆积柱形图(需要先添加百分比,再对百分比的变量做柱形图) 5、饼图、极坐标图 6、多重线性图
在作图之前,首先讲一下ggplot2的局限。
ggplot2最大的局限是,它基本不支持双坐标图和饼图。即使能做这些图形,也要很多设置,做起来非常繁琐。
按我个人理解,这个局限的根源与ggplot2开发者Hadley本身的审美习惯以及分析习惯脱不了关系。具体请看他在stackoverflow的这一段:
It’s not possible in ggplot2 because I believe plots with separate y scales (not y-scales that are transformations of each other) are fundamentally flawed.
大神有技术就能任性。即使一堆人在他那回复下面各种求双坐标。。不知道Hadley现在有没有改变主意,把双坐标列为ggplot2的下一个更新点。但是如果你想画双坐标图或者饼图,至少经个人的实践,这些都是比较困难的,设置繁琐而且不美观。要么选择用excel完成,要么听大神的话,用分面图(facet)或者柱形图代替,会更加省事一些。
所以,在了解以下常用图形前,我们需要记住,ggplot2不是万能的,它虽然能做出非常美观的图表,但是总有一些图不能做,因此多个工具结合使用是非常必要的。
在知道以上前提下,我们以ggplot2自带的diamonds数据集为基础,结合dplyr/tidyr的应用,介绍一下常用图形的画法。
然后来讲一下除了双坐标图和饼图以外,ggplot2可以支持的常用图形的画法。数据的话,我们使用ggplot2自带的数据包diamonds
首先定义一下
mytitle="演示:以diamond为例"
1)简单柱形图&
代码组成如下,这里使用格式刷mybar和mytheme,然后用geom_text添加柱形图标签(vjust=1表示在柱形图里面显示)
data1&-diamonds %&% group_by(cut) %&% summarize(avg_price=mean(price))
柱形图&-ggplot(data1,aes(x=cut,y=avg_price,fill=as.factor(cut)))+
mytitle+mybar+mytheme+
geom_text(aes(label=round(avg_price)),vjust=1,colour="white")
2)带分类的柱形图
举个例子来说,在有时候,我们想要快速绘图。使用facet_wrap或者facet_grid可以快速绘制相应图形。这也是ggplot2不太支持双坐标的原因:可以快速绘图,就不需要做那么多无用功了。
代码如下:
#dplyr处理数据
data2&-diamonds %&% group_by(cut,color) %&% summarize(avg_price=mean(price))
#画图,套用设定好的绘图元素
ggplot(data2,aes(x=color,y=avg_price))+facet_wrap(~cut,ncol = 2)+
mytitle+mybar+mytheme
#在facet_wrap里面,如果加上scales="free"的话,坐标就不一样了。
制图要点是,对数据作图后,添加geom_bar时,position=”dodge”(分开的)如果去掉这部分,默认是生成堆积图.
代码如下:
data3&-diamonds %&% filter(cut %in% c("Fair","Very Good","Ideal")) %&%
group_by(cut,color) %&% summarize(avg_price=mean(price))
簇状柱形图&-ggplot(data3,aes(x=color,y=avg_price,fill=cut))+
geom_bar(stat="identity",position="dodge")+
mytheme+mytitle+mycolour_3
簇状柱形图
这里如果想要定义颜色的相应顺序的话,可以使用factor&
譬如以下,只是用这行代码对颜色重新定义一下,用levels改变factor顺序,再画图的时候,颜色以及柱子顺序就会跟着改变了。非常方便。
data3$cut&-factor(data3$cut,levels=c("Very Good","Ideal","Fair"))
4)百分比堆积图
制图前要事先添加一个百分比的数据之后才好作图,这里我们用mutate(percent=n/sum(n))添加该百分比数据。同时去掉position=”dodge”
data4&-diamonds %&% filter(cut %in% c("Fair","Very Good","Ideal")) %&%
count(color,cut) %&%
mutate(percent=n/sum(n))
堆积图&-ggplot(data4,aes(x=color,y=percent,fill=cut))+mytitle+
geom_bar(stat="identity")+mytheme+mytitle+mycolour_3
当然,也可以做面积图。不过如果数据有缺失,面积图出错几率蛮大的
5)饼图以及极坐标图
参考一下这篇文章以及这篇文章
在ggplot2里并没有直接画饼图的方法,基本上都是先画出柱形图,再用coord_polar转化为饼图
有两种作图方法: 1)不指定x轴,直接用geom_bar生成y轴,然后fill=分类颜色,coord_polar直接投影y 该方法的好处代码是比较简单(coord_polar(“y”) 加标签方法请见:
data5&-diamonds %&% count(cut) %&%
mutate(percent=n/sum(n))
ggplot(data5,aes(x=factor(1),y=percent,fill=cut))+geom_bar(stat="identity",width=3)+mycolour_7+
coord_polar("y")+pie_theme+mytitle
2)指定x轴,x轴同时也是颜色(fill),先画柱形图,再转化为圆形。坏处是公式相对比较繁琐一些。
ggplot(data5,aes(x=cut,y=percent,fill=cut))+
geom_bar(stat="identity",width=3)+
mycolour_7+coord_polar("x")+pie_theme+mytitle
但是我尝试了多次,在饼图里加标签方法非常难以理解。。如果要饼图加标签的话,或许还不如柱形图
附上分面柱形图画法:
data5_1&-data5 %&% filter(color %in% c("D","E","F","G"))
ggplot(data5_1,aes(x=factor(1),y=percent,fill=cut))+geom_bar(stat="identity",width=3)+mycolour_7+
coord_polar("y")+pie_theme+facet_wrap(~color,ncol = 4)+
theme(legend.position="bottom")+mytitle
除了以上柱形图以外,折线图我们做的也比较多。
简单的折线图直接做就好了
然后像下图这样的
要点是,先做成如A-B-变量这样的二联表,然后,x轴为A,group为b,colour为b 下面代码展示了这个处理
如果去掉group的话,折线图会不知道怎么去处理数字。
data6&-diamonds %&% count(color,cut) %&% filter(color %in% c("D","E","F"))%&%
mutate(percent=n/sum(n))
ggplot(data6,aes(x=cut,y=n,group=color,colour=color))+geom_line(size=1.5)+mypoint+
mycolour_line_7+mytheme+mytitle
还有一些其他有用的图形 & 总之,ggplot2的语法还是比较独特的,而且其实处处有坑,处处有惊喜。如果作为商业绘图的话,需要一点一点地去探索去改变,保证风格和细节完美无缺。
不过ggplot2绘图有个好处是,一旦整理出常用的绘图代码,以后就可以无限次套用,尤其是那些格式刷,事先设定好的主题等。即ggplot2绘图,是完全可以做到越绘越快,再开发成本低廉的。
另外补充说明的是,ggplot2绘图,个人更看好其多种映射,以及在探索性数据分析里快捷绘图的能力,还有跟地图啊等结合的能力。还有动态交互等等。
譬如现在比较流行的R/Python与动态网页(大部分是D3)的结合 ,
但愿各位不要将绘图局限于上述所选的一些最常用的图形与格式化调整里。请容我吐槽一句,这样子调风格学习真的很苦(づ ̄ ~~ ̄|||)づ
参考资料:
1、 2、 3、 4、万能的stackoverflow
6、配色相关:
刘万祥老师早期的一篇 ,以及
博客总目录:
TA的最新馆藏[转]&
喜欢该文的人也喜欢他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)苹果/安卓/wp
积分 541, 距离下一级还需 259 积分
权限: 自定义头衔, 签名中使用图片
道具: 彩虹炫, 涂鸦板, 雷达卡, 热点灯, 金钱卡, 显身卡, 匿名卡, 抢沙发下一级可获得
权限: 隐身
购买后可立即获得
权限: 隐身
道具: 金钱卡, 彩虹炫, 雷达卡, 热点灯, 涂鸦板
开心签到天数: 1 天连续签到: 1 天[LV.1]初来乍到
if (!suppressWarnings(require(&ggplot2&))) {
&&install.packages(&ggplot2&)
&&require(&ggplot2&)
}
if (!suppressWarnings(require(&reshape2&))) {
&&install.packages(&reshape2&)
&&require(&reshape2&)
}
if (!suppressWarnings(require(&plyr&))) {
&&install.packages(&plyr&)
&&require(&plyr&)
}
if (!suppressWarnings(require(&zoo&))) {
&&install.packages(&zoo&)
&&require(&zoo&)
}
if (!suppressWarnings(require(&grid&))) {
&&install.packages(&grid&)
&&require(&grid&)
}
if (!suppressWarnings(require(&gridExtra&))) {
&&install.packages(&gridExtra&)
&&require(&gridExtra&)
}
report &- read.csv(&H:/自媒体//茶与咖啡/report.csv&, header = T, sep = &,&, stringsAsFactors = F)
report$week &- as.Date(report[,1])复制代码
饮品就如人的面孔一样千差万别,但是人们经常饮用的饮料无外乎茶、啤酒、咖啡、酒这四大类,这四类饮品已经深深的融入到人类的历史文化中了。
中国是茶的发源地,中国人种茶、饮茶已经有3000的历史了,茶文化已经融入到中国人的骨髓里,常言道:“开门七件事,柴米油盐酱醋茶”,茶已经从士绅的茶座走向了每一个中国人的心里,也走出了中国;啤酒的销量仅次于水和茶,说起啤酒的历史那应该和酒一样古老,公元前6000年左右巴比伦人用黏土板雕刻的献祭用啤酒制作法是最古老的有关啤酒的文献,这一清凉夏日饮品19世纪才传入中国,但史载我们的仙人很早以前也掌握了麦芽酿造技术,即所谓的蘖法酿醴(li),但是汉代以后该方法失传了,取而代之的是酒曲发酵的甜酒;而咖啡应该是最年轻的,但是它却以温柔的一面改变着历史和创造历史的人。
#作最近四年的四种饮料的对比,看看谁是number one
teabar &- cbind(report, year = substr(report$week,1,4))
teabar &- teabar[, -1]
teabar &- aggregate(.~ year, data = teabar,sum)#透视表按年汇总
teabar &- teabar[9:12,]
teabar &- melt(teabar, id = &year&)
theme_opts &- theme(panel.background=element_rect(fill=rgb(red = 242, green = 242, blue = 242, max = 255)),
& && &plot.background=element_rect(fill=rgb(red = 242, green = 242, blue = 242, max = 255)),
& && &panel.grid.major=element_line(colour=rgb(red = 146, green = 146, blue = 146, max = 255),size=.75),
& &&&#panel.border=element_rect(colour=rgb(red = 242, green = 242, blue = 242, max = 255)),
& && &axis.ticks=element_blank(),
& && &axis.text.x = element_text(colour=&grey20&, size=12),
& && &axis.text.y = element_text(colour=&grey20&,size=12),
& && &axis.text.y = element_text(size=13,colour=rgb(red = 74, green = 69, blue = 42, max = 255),face=&bold&),
& && &axis.title.y=element_text(size=11,colour=rgb(red = 74, green = 69, blue = 42, max = 255),face=&bold&,vjust=1.5),
& && &axis.title.x=element_text(size=11,colour=rgb(red = 74, green = 69, blue = 42, max = 255),face=&bold&,vjust=-.5),
& && &legend.position=&none&)
cols &- c(rgb(red = 0, green = 130, blue = 137, max = 255),#茶
& && && & rgb(red = 252, green = 157, blue = 154, max = 255),#咖啡
& && && & rgb(red = 253, green = 117, blue = 107, max = 255),#啤酒
& && && & rgb(red = 200, green = 200, blue = 169, max = 255))#酒
p &- ggplot(teabar,aes(x = variable, y = value, fill = variable)) +
&&geom_bar(stat = &identity&,fill = cols) +
&&coord_flip() +
&&ylab(&&) +
&&xlab(&&) +
&&theme_opts + guides(fill=FALSE)
p + facet_wrap( ~ year, ncol=2)复制代码
22:57:49 上传
如果搜索量代表着人们对茶、啤酒、咖啡、酒代表着人们的偏好,那么谁才是人们心中的最佳饮品呢?咖啡是近四年来搜索量均排名第一,其次为茶、酒、啤酒。但从趋势上分析,茶和啤酒正变得越来越热,而咖啡经历暴涨之后略显颓势,有趣的是酒自2005年期搜索量一直在下降,知道近两年进入了平台期。但酒类人家也曾阔过,和酒类相比,2005年之前,其他三类饮料根本不是一个档次。另外,在年之间四类饮料的搜索量均跌入了谷底期。
#下一步画年折线图,看看有没有什么趋势
teabar &- cbind(report, year = substr(report$week,1,4))
teabar &- teabar[, -1]
teabar &- aggregate(.~ year, data = teabar,sum)#透视表按年汇总
#teabar &- melt(teabar, id = &year&)
teabar$year &-
theme_opts &- theme(panel.background=element_rect(fill=rgb(red = 242, green = 242, blue = 242, max = 255)),
& && &plot.background=element_rect(fill=rgb(red = 242, green = 242, blue = 242, max = 255)),
& && &panel.grid.major=element_line(colour=rgb(red = 146, green = 146, blue = 146, max = 255),size=.75),
& &&&panel.border=element_blank(),
& && &axis.ticks=element_blank(),
& && &axis.text.x = element_text(colour=&grey20&, size=12),
& && &axis.text.y = element_text(colour=&grey20&,size=12),
& && &axis.text.y = element_text(size=13,colour=rgb(red = 74, green = 69, blue = 42, max = 255),face=&bold&),
& && &axis.title.y=element_text(size=11,colour=rgb(red = 74, green = 69, blue = 42, max = 255),face=&bold&,vjust=1.5),
& && &axis.title.x=element_text(size=11,colour=rgb(red = 74, green = 69, blue = 42, max = 255),face=&bold&,vjust=-.5),
& && &legend.position=&none&)
#绘制p1
p1 &- ggplot(teabar,aes(x = year)) +
&&geom_line(aes(y = 茶), color = rgb(red = 0, green = 130, blue = 137, max = 255), size=1.6) +
&&annotate(&text&, x = 2012.5, y = 2300, colour=rgb(red = 0, green = 130, blue = 137, max = 255), label=&茶&, size = 6, fontface = &bold&) +
&&geom_line(aes(y = 咖啡), color = rgb(red = 252, green = 157, blue = 154, max = 255), size = 1.6) +
&&annotate(&text&, x = 2012.5, y = 3300, colour = rgb(red = 252, green = 157, blue = 154, max = 255), label = &咖啡&, size = 6, fontface = &bold&) +
&&geom_line(aes(y = 啤酒), color = rgb(red = 253, green = 117, blue = 107, max = 255), size = 1.6) +
&&annotate(&text&, x = 2012.5, y = 1800, colour = rgb(red = 253, green = 117, blue = 107, max = 255), label = &啤酒&, size = 6, fontface = &bold&) +
&&geom_line(aes(y = 酒), color = rgb(red = 200, green = 200, blue = 169, max = 255), size = 1.6) +
&&annotate(&text&, x = 2012.5, y = 2800, colour = rgb(red = 200, green = 200, blue = 169, max = 255), label = &酒&, size = 6, fontface = &bold&) +
&&theme_bw() +
&&scale_x_continuous(minor_breaks = 2004, breaks = c(06,09,12,15)) + #这里空着这竖行次网格线minor_breaks
&&ggtitle(&&) +
&&ylab(&&) +
&&xlab(&&) +
&&theme_opts复制代码
22:58:25 上传
从年跨度上分析,我们可能就得到这一点知识,如果就此止步,也许会错过很多偏好的细节。不如把时间的粒度缩小一点,看看什么情况。从季度趋势上分析,每类产品在第四季度和第一季度之间都有有一个峰值,而且在时间上更偏向与第四季度,但啤酒成了一个例外,它的搜索峰值在年中,即第二和第三季度之间,个人猜测,原因可能是第四季度和第一季度是为圣诞节、元旦采购的时间,而第三季度则是清凉夏日。如果这些搜索量和人们的消费习惯相关,很难拒绝将广告、折扣等促销活动安排在峰值时期。
#下一步化季度折线图
teabar &- report
teabar$year &- as.yearqtr(teabar$week)
teabar &- teabar[, -1]
teabar &- aggregate(.~ year, data = teabar,sum)#透视表按年汇总
teabar$year &- as.character(teabar$year)
teabar$year &- gsub(& Q&, &0&, teabar$year)
teabar$year &- as.numeric(teabar$year)
teabar &- teabar[-length(teabar[,1]),]
#teabar &- melt(teabar, id = &year&)
#teabar$year &-
#quarter &- teabar$year
quarter &- 1:44
teabar &- cbind(teabar, quarter)
#quarter &- quarter[!is.na(quarter)]
temp &- seq(1, 44, by = 4)
theme_opts &- theme(panel.background=element_rect(fill=rgb(red = 242, green = 242, blue = 242, max = 255)),
& && &plot.background=element_rect(fill=rgb(red = 242, green = 242, blue = 242, max = 255)),
& && &panel.grid.major=element_line(colour=rgb(red = 146, green = 146, blue = 146, max = 255),size=.75),
& &&&panel.border=element_blank(),#element_rect(colour=rgb(red = 242, green = 242, blue = 242, max = 255)),
& && &axis.ticks=element_blank(),
& && &axis.text.x = element_text(colour=&grey20&, size=12),
& && &axis.text.y = element_text(colour=&grey20&,size=12),
& && &axis.text.y = element_text(size=13,colour=rgb(red = 74, green = 69, blue = 42, max = 255),face=&bold&),
& && &axis.title.y=element_text(size=11,colour=rgb(red = 74, green = 69, blue = 42, max = 255),face=&bold&,vjust=1.5),
& && &axis.title.x=element_text(size=11,colour=rgb(red = 74, green = 69, blue = 42, max = 255),face=&bold&,vjust=-.5),
& && &legend.position=&none&)
cols &- c(rgb(red = 0, green = 130, blue = 137, max = 255),#茶
& && && & rgb(red = 252, green = 157, blue = 154, max = 255),#咖啡
& && && & rgb(red = 253, green = 117, blue = 107, max = 255),#啤酒
& && && & rgb(red = 200, green = 200, blue = 169, max = 255))#酒
#绘制p1
p1 &- ggplot(teabar,aes(x = quarter)) +
&&geom_line(aes(y = 茶), color = rgb(red = 0, green = 130, blue = 137, max = 255), size=1.6) +
&&annotate(&text&, x = 1, y = 525, colour=rgb(red = 0, green = 130, blue = 137, max = 255), label=&茶&, size = 6, fontface = &bold&) +
&&
&&theme_bw() +
&&scale_x_continuous(minor_breaks = 0, breaks = c(1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41), labels =&&c(&2004Q1&,&2005Q1&,&2006Q1&,&2007Q1&,&2008Q1&,&2009Q1&,&2010Q1&,&2011Q1&,&2012Q1&,&2013Q1&,&2014Q1&)) + #这里空着这竖行次网格线minor_breaks
&&ggtitle(&&) +
&&ylab(&&) +
&&xlab(&&) +
&&theme_opts +
&&theme(axis.text.x = element_blank(), plot.margin = unit(c(-1,0.5,0.5,0.5), &lines&))
p2 &- ggplot(teabar,aes(x = quarter)) +
&&geom_line(aes(y = 咖啡), color = rgb(red = 252, green = 157, blue = 154, max = 255), size = 1.6) +
&&annotate(&text&, x = 1, y = 650, colour = rgb(red = 252, green = 157, blue = 154, max = 255), label = &咖啡&, size = 6, fontface = &bold&) +
&&
&&theme_bw() +
&&scale_x_continuous(minor_breaks = 0, breaks = c(1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41), labels =&&c(&2004Q1&,&2005Q1&,&2006Q1&,&2007Q1&,&2008Q1&,&2009Q1&,&2010Q1&,&2011Q1&,&2012Q1&,&2013Q1&,&2014Q1&)) + #这里空着这竖行次网格线minor_breaks
&&ggtitle(&&) +
&&ylab(&&) +
&&xlab(&&) +
&&theme_opts +
&&theme(axis.text.x = element_blank(), plot.margin = unit(c(-1,0.5,0.5,0.5), &lines&))
p3 &- ggplot(teabar,aes(x = quarter)) +
&&geom_line(aes(y = 啤酒), color = rgb(red = 253, green = 117, blue = 107, max = 255), size = 1.6) +
&&annotate(&text&, x = 1, y = 500, colour = rgb(red = 253, green = 117, blue = 107, max = 255), label = &啤酒&, size = 6, fontface = &bold&) +
&&theme_bw() +
&&scale_x_continuous(minor_breaks = 0, breaks = c(1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41), labels =&&c(&2004Q1&,&2005Q1&,&2006Q1&,&2007Q1&,&2008Q1&,&2009Q1&,&2010Q1&,&2011Q1&,&2012Q1&,&2013Q1&,&2014Q1&)) + #这里空着这竖行次网格线minor_breaks
&&ggtitle(&&) +
&&ylab(&&) +
&&xlab(&&) +
&&theme_opts +
&&theme(plot.margin = unit(c(-1,0.5,0.5,0.5), &lines&))
p4 &- ggplot(teabar,aes(x = quarter)) +
&&geom_line(aes(y = 酒), color = rgb(red = 200, green = 200, blue = 169, max = 255), size = 1.6) +
&&annotate(&text&, x = 1, y = 850, colour = rgb(red = 200, green = 200, blue = 169, max = 255), label = &酒&, size = 6, fontface = &bold&) +
&&theme_bw() +
&&scale_x_continuous(minor_breaks = 0, breaks = c(1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41), labels =&&c(&2004Q1&,&2005Q1&,&2006Q1&,&2007Q1&,&2008Q1&,&2009Q1&,&2010Q1&,&2011Q1&,&2012Q1&,&2013Q1&,&2014Q1&)) + #这里空着这竖行次网格线minor_breaks
&&ggtitle(&&) +
&&ylab(&&) +
&&xlab(&&) +
&&theme_opts +
&&theme(plot.margin = unit(c(-1,0.5,0.5,0.5), &lines&))
gp1&- ggplot_gtable(ggplot_build(p1))
gp2&- ggplot_gtable(ggplot_build(p2))
gp3&- ggplot_gtable(ggplot_build(p3))
gp4&- ggplot_gtable(ggplot_build(p4))
maxWidth = unit.pmax(gp1$widths[2:3], gp2$widths[2:3], gp3$widths[2:3], gp4$widths[2:3])
gp1$widths[2:3] &- maxWidth
gp2$widths[2:3] &- maxWidth
gp3$widths[2:3] &- maxWidth
gp4$widths[2:3] &- maxWidth
grid.arrange(gp1, gp2, gp3, gp4)#, nrow=4设置排列方式复制代码
22:59:00 上传
#画月折线图
如果将时间粒度再缩小一些,在月度图上可能看到的、更多的细节,除了年末和年初的一个月会出现峰值以外(啤酒除外),每个一两个月还会出现一个小峰值,这可能又是一个人们的购物习惯,每次购物间隔约为1到2个月。周折线则将这种习惯定位到月末至月初的一周时间。
22:59:16 上传
22:59:32 上传
更多数据及代码链接:http://pan.baidu.com/s/1hqhaPJe 密码:微信索取关于我们,关注理性与文艺,用数据创作内容性的精致阅读,这里是数据分析挖掘人员与文艺青年的集结地,不做培训,不做鼓吹,只踏踏实实的做一个又一个数据驱动的文章,并设计机器人减轻数据分析的负担,无论你感兴趣还是想参与都可以关注,请加微信公众号大音如霜
22:57:17 上传
支持楼主:、
购买后,论坛将把您花费的资金全部奖励给楼主,以表示您对TA发好贴的支持
载入中......
最近的帖子老是超过限制
不错,谢谢分享。。。。
32个赞!!!!
好棒!谢谢分享!
主可以分享下数据么,sample就可以了!
挺好看的,支持一下
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
如有投资本站或合作意向,请联系(010-);
邮箱:service@pinggu.org
投诉或不良信息处理:(010-)
论坛法律顾问:王进律师}

我要回帖

更多关于 加权移动平均线 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信