折線圖
如果將散點圖上的點從左往右連接起來,就會得到一個折線圖,以基礎安裝中的Orange數據集為例,它包含五種橘樹的樹齡和年輪數據,現要考察第一種橘樹的生長情況:
opar <- par(no.readonly=TRUE) #設置初始化參數
par(mfrow=c(1,2)) #把畫布分成2部分
t1 <- subset(Orange, Tree==1) #加載數據集,考察第一種橘樹的生長情況
plot(t1$age, t1$circumference, xlab="Age (days)", ylab="Circumference (mm)",
main="Orange Tree 1 Growth") #畫出樹的年齡和生長周長的散點圖
plot(t1$age, t1$circumference, xlab="Age (days)", ylab="Circumference (mm)",main="Orange Tree 1 Growth", type="b") #畫出樹的年齡和生長周長的折線圖
par(opar) #還原畫布設置
折線圖一般可用下列兩個函數之一來創建:
plot(x, y, type=)
lines(x, y, type=)
x和y是要連接的(x, y)點的數值型向量。
下圖是折線的類型:
上圖顯示了plot()和lines()函數中的type參數值在繪圖中的具體表現,值得注意的是plot()和lines()函數工作原理並不相同,plot()函數是在被調用時創建一幅新圖,而lines()函數則是在已存在的圖形上添加信息,並不能自己生成圖形。
例子:我們可以先通過plot()函數中的type="n"選項來創建坐標軸、標題和其他圖形特征,然后再使用lines()函數添加各種需要繪制的曲線。我們以繪制五種橘樹隨時間推移的生長狀況為例,逐步展示一個更復雜折線圖的創建過程。每種樹都有自己獨有的線條。代碼如下:
Orange$Tree <- as.numeric(Orange$Tree) #把變量Orange$Tree設置為數值型
ntrees <- max(Orange$Tree) #取出樹的類型有多少種
xrange <- range(Orange$age) #range 返回一個包含所有給定參數的最小值和最大值的向量。
yrange <- range(Orange$circumference)
plot(xrange, yrange, #繪制散點圖的兩個參數
type="n", # type="n"選項來創建坐標軸
xlab="Age (days)", #設置x軸的名稱
ylab="Circumference (mm)" #設置y軸的名稱
)
colors <- rainbow(ntrees) #設置每種樹不同的顏色
linetype <- c(1:ntrees) #設置從1到ntrees總共幾種不通過的線形
plotchar <- seq(18, 18+ntrees, 1) #設置線條中圖標不同的類型,圓形、方形等
for (i in 1:ntrees) { #設置i的取值范圍
tree <- subset(Orange, Tree==i) #取出每一個子樹
lines(tree$age, tree$circumference, #在原來散點圖的基礎上添加信息
type="b", #設置線形為點線
lwd=2, #lwd是設置線條的寬度(粗細)
lty=linetype[i], # lty設置線條類型,比如i=2意思是繪制虛線
col=colors[i], # col設置線條的顏色
pch=plotchar[i] #pch設置線條中圖標不同的形狀,比如pch=17是三角標識
)
}
title("Tree Growth", "example of line plot") #設置主標題和副標題
legend(xrange[1], yrange[2], #繪制圖例,xrange[1], yrange[2]用來定位圖例的x軸和y軸坐標
1:ntrees, #設置繪制線條的數目
cex=0.8, #設置圖例中字體的大小
col=colors, #指定圖例中線條的顏色
pch=plotchar, #指定圖例線形中不同的圖標
lty=linetype, #指定圖例的線形
title="Tree" #指定圖列的標題
)
結果分析:plot()函數先用來創建空圖形,只設定了軸標簽和軸范圍,並沒有繪制任何數據點,每種橘樹獨有的折線和點都是隨后通過lines()函數來添加的。可以看到,Tree 4和Tree 5在整個時間段中一直保持着最快的生長速度,而且Tree 5在大約664天的時候超過了Tree 4。