R语言ggplot2包之画折线图

引言

折线图一般用于描述一维变量随着某一连续变量变化的情况,连续变量通常为时间。换句话说,折线图最适合描述时间序列数据的变化情况。当然随着离散变量变化也是可以的,不过这个离散变量必须是有序的。

画一条折线图

一条基本的折线图还是比较简单的,只要在ggplot里的aes传入x,y数据且geom指定为line线即可。如果x是连续变量,直接传入即可。如果x是离散变量,此时x需要因子化,并在aes里设定group参数为1.

线可以是实线,也可以是点状的,可以用个linetpye进行设定,参数可以选择solid, dashed, dotted等。

library(gcookbook)
library(ggplot2)
#连续变量的情况
ggplot(BOD, aes(x=Time, y=demand)) + geom_line()
#离散变量的情况
BOD1 <- BOD # 赋值数据
BOD1$Time <- factor(BOD1$Time)#变量因子化
ggplot(BOD1, aes(x=Time, y=demand, group=1)) + geom_line(linetype="dotted")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

当然如果需要改变y轴的范围,可以用在后面加入ylim(a, b))进行设置。 
这里写图片描述 
这里写图片描述

给折线图增加点

有时候我们需要在折线图上显示对应x轴的点数据,从而可以更加清晰的辨别原始数据,这特别适合数据比较稀疏的情况,比如上述没有6的数据情况。我们直接在代码后面加上geom_point()就可以了。如果想改变点的大小和形状,控制size和shape这两个参数就可以了。

ggplot(BOD, aes(x=Time, y=demand)) + geom_line() + geom_point(size=4, shape=20)
  • 1

这里写图片描述

画多条折线图

有时候我们想对某一离散变量进行分组,画出多个折线图进行比较。

supp1=c("OJ","OJ","OJ","VC","VC","VC")
dose1=c(0.5,1.0,2.0,0.5,1.0,2.0)
length1=c(13.23,22.70,26.06,7.98,16.77,26.14)
tgg=data.frame(supp1,dose1,length1)
ggplot(tgg, aes(x=factor(dose1), y=length1, colour=supp1,group=supp1)) + geom_line(size=2)#x为药剂剂量,并非连续型变量
  • 1
  • 2
  • 3
  • 4
  • 5

这里写图片描述 
有时候你还想在比较的两条线给加上数据点,可以在aes里面设置shape或者fill参数,两种方法得出的图大致相同,除了点形状差异。前者,两条线上的点形状各异,后者点形状相同。

#设置shape参数
ggplot(tgg, aes(x=dose1, y=length1, color=supp1,shape=supp1)) + geom_line() +geom_point(size=4)
#设置fill参数
ggplot(tgg, aes(x=dose1, y=length1, color=supp1,fill=supp1)) + geom_line() +geom_point(size=4)
  • 1
  • 2
  • 3
  • 4

这里写图片描述 
这里写图片描述 
细心的你会发现,两条线上游数据重叠了,如果想区分开,使用position_dodge函数是个好办法。

ggplot(tgg, aes(x=dose1, y=length1, shape=supp1)) +
geom_line(position=position_dodge(0.2)) + # Dodge lines by 0.2
geom_point(position=position_dodge(0.2), size=4)#控制两线各向左向右移0.2的聚类,线也移,点也移,永远不分开。
  • 1
  • 2
  • 3

这里写图片描述 
基本的画法就这些,个人认为画的质量可以与EXCEL相媲美。

猜你喜欢

转载自blog.csdn.net/zhaozhn5/article/details/79264196
今日推荐