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=价格,colour=分类)) + 
  geom_line()+
  geom_point(data =lev)
+geom_text(aes(label = 分类),data = lev)
Error: Aesthetics must be either length 1 or the same as the data (2): x, y, label, colour

正确写法

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

这里写图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值