ggplot

浏览: 1763

股市分析,使用ggplot

install.packages("gcookbook")
install.packages("ggplot2")
library(ggplot2)
library(gcookbook)
x<-read.csv("G:/stock.csv",header=TRUE,sep=",")
b<-as.Date(x$日期)#日期类型转换
a<-data.frame(b,x[,-1])
names(a)<-c("日期","开盘价","最高价","最低价","收盘价")
attach(a)
colnames(a)
help(ggplot)
#xy对应a中实际存在的列名
ggplot(a, aes(x=日期, y=开盘价,group=1)) + geom_line(linetype="dotted")#点图,
>ggplot(a, aes(x=日期, y=开盘价,group=1)) + geom_line(color="blue")
>ggplot(a, aes(x=日期, y=收盘价)) + geom_line(size=2)#粗线

下面两种写法结果相同

>ggplot(stock, aes(x=日期, y=价格,colour=分类))+
geom_line())
>ggplot(stock, aes(x=日期, y=价格))+
geom_line(aes(color=分类)

区分出两个价格

#因为ggplot不能画双曲线,所以把最高价和最低价合并到一列,用颜色来区分
>d<-a[,c(1,3,4)]
#把最高价最低价行列转换要用到reshape2包中的melt
>library(reshape2)
>stock<-melt(d,id.vars ='日期')#行列转换最高最低分类
>colnames(stock)
>names(stock)<-c("日期","分类","价格")
>attach(stock)
>ggplot(stock, aes(x=日期, y=价格,group=1)) + geom_line(aes(color=分类))#区分最高价最低价两个分类

这里写图片描述

#标出最高价和最低价
>top1<-stock[which.max(stock[,3]),]#取最高价一行
>low1<-stock[which.min(stock[,3]),]#取最低价一行
>lev<-rbind(top1,low1)#合并
>ggplot(stock, aes(x=日期, y=价格,group=1)) +
geom_line(aes(color=分类))+
geom_point(data =lev$价格)
Error: ggplot2 doesn't know how to deal with data of class numeric

Error: ggplot2 doesn’t know how to deal with data of class numeric 
查询了下这个错误,说是ggplot2 中,所有函数中data 变量,均要data.frame 类型 
但lev是data.frame类型的,继续查看错误原因

> class(lev)
[1] "data.frame"

正确写法

> ggplot(stock, aes(x=日期, y=价格,colour=分类)) + 
+ geom_line()+
+ geom_point(data =lev)

图形上出现两个点 
这里写图片描述 
给这两个点添加标签

ggplot(stock, aes(x=日期, y=价格))+
geom_line(aes(color=分类))+
geom_point(data =lev)+
geom_text(aes(label=分类),data=lev)

这里写图片描述

推荐 0
本文由 liliwu 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册