折線圖
第一部分:概述 & 簡單繪圖
在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資料集裡對樹的編号就是按生長速度來設定的,生長越快其編号越大。今天的内容就分享到這裡,咱們下期再見!