折线图
第一部分:概述 & 简单绘图
在R语言中可以使用基本绘图函数lines(x, y, type=)来绘制线条,这里参数
x和y分别是数值型向量,代表着横坐标和纵坐标的数据,参数type=主要是用来控制线条的类型。
这里需要指出的是lines()函数本身不产生任何图形,通常情况下它只有在plot()函数后使用才会在图片上添加相关线条。
#在R中分号(;)可以将两个命令连接成一行,如下所示
x <- c(1:5); y <- x # 产生相关数据用于绘图,类似于分别执行x <- c(1:5)和y <- x
par(pch=22, col="red") # 设置绘图符号和颜色,下图表示的就是绘图符号
par(mfrow=c(2,4)) # 设置绘图版面,将画布设置成2行4列的格式,共8个绘图区域
opts = c("p","l","o","b","c","s","S","h") #构建type=类型
for(i in 1:length(opts)){
heading = paste("type=",opts[i])
plot(x, y, type="n", main=heading)
lines(x, y, type=opts[i])
}
# 接下来我们将展示在plot()函数中去除type=这个参数之后的效果
x <- c(1:5); y <- x # create some data
par(pch=22, col="blue") # plotting symbol and color
par(mfrow=c(2,4)) # all plots on one page
opts = c("p","l","o","b","c","s","S","h")
for(i in 1:length(opts)) {
heading = paste("type=",opts[i])
plot(x, y, main=heading)
lines(x, y, type=opts[i])
}
# 这里利用for循环来绘制不同区域的图形
从上图中可以看出,只有当绘制点的功能在plot()命令中被抑制时,这个type="c"项才会看起来和type="b"不同。
第二部分:复杂折线图的绘制接下来我们将利用R语言内置的Orange数据集来展示如何绘制更为复杂的折线图。这里每棵树都会有自己独特的线条。
#首先我们先了解一下Orange(O要大写)数据的基本信息
?Orange
从返回的信息可以看出,该数据集主要有三个参数,一个是Tree,它实际上是树的ID号,从1~5表示共有5棵树,而age表示的是测量时间与
从返回的信息可以看出,该数据集主要有三个参数,一个是Tree,它实际上是树的ID号,从1~5表示共有5棵树,而age表示的是测量时间与1968年12月31日相隔的日数,而circumference则表示树干的周长,所以简单的来看我们可以利用这组数据绘制出每棵树的树干周长随时间变化的趋势。
# 将因子型数据转换成数值型,方便接下来的处理
#推荐读取数据时先设置options(stringsAsFactors=F)
Orange$Tree <- as.numeric(Orange$Tree)
ntrees <- max(Orange$Tree) #获取树的数目
# 获取x轴和y轴的范围
xrange <- range(Orange$age)
yrange <- range(Orange$circumference)
# 绘制图形
plot(xrange, yrange, type="n", xlab="Age (days)",
ylab="Circumference (mm)" )
colors <- rainbow(ntrees) #rainbow()函数是用来获取颜色参数的
linetype <- c(1:ntrees) # 获取线条形状
plotchar <- seq(18,18+ntrees,1) # 获取绘图符号(pch)
# 添加折线
#lwd表示的是线宽,lty表示线的类型,col表示颜色
for (i in 1:ntrees) {
tree <- subset(Orange, Tree==i)
lines(tree$age, tree$circumference, type="b", lwd=1.5,
lty=linetype[i], col=colors[i], pch=plotchar[i])
}
# 添加标题和副标题
title("Tree Growth", "example of line plot") #第一个参数是主标题,第二个则是副标题
# 添加图例
legend(xrange[1], yrange[2], 1:ntrees, cex=0.8, col=colors,
pch=plotchar, lty=linetype, title="Tree")
#添加水平线和垂线
lines(x=c(500,500), y=c(0,500)) #添加垂线
lines(x=c(0,2000), y=c(120,120)) #添加水平线
需要注意的是,在legend()里的
第1个参数是图例在图中位置的横坐标,第2个参数则是位置的纵坐标,第3个参数即为图例要展示的信息,剩下的几个参数就是颜色、绘图符号、线条类型以及图例的标题。
从图中我们可以简单看出第5棵树的生长速度最快,第1颗树最慢。实际上,Orange数据集里对树的编号就是按生长速度来设置的,生长越快其编号越大。今天的内容就分享到这里,咱们下期再见!