在畫圖時最常見的需求就是依據不同的資料,指定資料點的符號、顏色與大小,以下介紹一些基本的使用方式。
plot
預設會使用圓圈來標示資料點,我們可以透過 pch
參數來使用不同的資料點符號,可用的符號如下:
假設要將符號設定為實心的圓點(編號 16
),可以執行:
plot(x = Veg$BARESOIL, y = Veg$R, xlab = "Exposed soil", ylab = "Species richness", main = "Scatter plot", xlim = c(0, 45), ylim = c(4, 19), pch = 16)
vegetation 的資料是從 8 個斷面(transect)中所蒐集到的,如果我們想在圖形上區分出不同斷面的資料分佈,我們可以將 pch
直接指定為斷面的編號,這樣就可以用不同的符號表示不同的斷面,首先先檢查一下斷面的實際資料:
Veg$Transect
輸出為
[1] 1 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 3 [20] 3 3 3 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 [39] 6 6 6 6 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 [58] 8
由於斷面的資料剛好是從 1
到 8
的數字,而這些數字也都有對應到 pch
的符號,所以可以不需要做額外的轉換,直接就可以指定給 pch
:
plot(x = Veg$BARESOIL, y = Veg$R, xlab = "Exposed soil", ylab = "Species richness", main = "Scatter plot", xlim = c(0, 45), ylim = c(4, 19), pch = Veg$Transect)
畫出的圖形為
這種用資料的數值來指定 pch
的方式有一些地方要注意:
Veg$Transect
的數值是從 0
開始編號的話(0
、1
、2
、⋯⋯),就不能直接將 Veg$Transect
指定給 pch
,否則所有編號為 0
的資料會畫不出來。Veg$Transect
的資料長度跟 Veg$BARESOIL
與 Veg$R
不同的話,會造成畫出來的資料點符號錯誤。假設 Veg$Transect
的資料長度,R 會在資料長度不夠時,自動重複使用 Veg$Transect
的資料,而在我們這個例子中,所有變數的資料長度都相同,所以沒有這樣的問題。pch
只能接受整數的資料,如果指定為 factor 的話,會出現錯誤。如果我們需要依照資料的年份來指定資料點符號的話,步驟就會比較複雜,因為一般的年份(例如 1967
)沒有剛好對應的 pch
數值,所以還要另外在建立一個數值向量來指定資料點符號。
假設我們要將資料依據年份(Veg$Time
)來區分,把 1974
年以前的資料跟 1974
年以後的資料分開,分別用編號 1
與 16
的符號來表示資料點,則操作步驟如下:
Veg$Time2 <- Veg$Time Veg$Time2 [Veg$Time <= 1974] <- 1 Veg$Time2 [Veg$Time > 1974] <- 16 Veg$Time2
輸出為
[1] 1 1 1 1 16 16 16 1 1 1 1 16 16 [14] 16 1 1 1 1 16 16 16 16 1 1 1 1 [27] 16 16 16 16 1 1 1 1 16 16 16 16 1 [40] 1 1 1 16 16 16 16 1 1 1 16 16 16 [53] 1 1 1 16 16 16
這裡先建立一個 Veg$Time
向量,其內容就是每一筆資料所對應的 pch
值,接著就可以使用這個向量來指定資料點的符號:
plot(x = Veg$BARESOIL, y = Veg$R, xlab = "Exposed soil", ylab = "Species richness", main = "Scatter plot", xlim = c(0, 45), ylim = c(4, 19), pch = Veg$Time2)
畫出來的圖形為
關於 pch
的詳細說明,可以參考 points
線上手冊:
?points