跳轉到內容

統計分析:R/R/圖形入門

來自華夏公益教科書,開放的書籍,開放的世界
正如本書貫穿始終所論證的,分析中一個極其重要的部分是對資料的視覺化。幸運的是,R 擁有廣泛的資料視覺化功能:事實上,本書中的所有圖形都是使用 R 製作的,通常只需幾行程式碼[1]

在 R 中生成繪圖主要有兩種方法

  1. 傳統的 R 圖形。我們將在此主題中介紹這個基本的圖形框架。我們將使用它來生成與圖 1.1 和 1.2 中類似的繪圖。
  2. “Trellis” 圖形。這是一個更復雜的框架,可用於在一個頁面上生成多個類似的繪圖。在 R 中,此功能由 “lattice” 包提供(鍵入 help("Lattice", package=lattice) 獲取詳細資訊)。

如何生成特定型別繪圖的詳細資訊將在後面的章節中介紹;本主題僅介紹最基本的原理,其中主要有 3 個要點需要牢記

  • 在 R 中生成繪圖是透過鍵入特定的圖形命令來實現的。這些命令有兩種型別
    1. 設定完全新繪圖的命令。此型別最常見的函式被稱為 plot()。在最簡單的情況下,這可能會用新繪圖替換任何先前的繪圖。
    2. 向現有繪圖新增圖形(線、文字、點等)的命令。許多函式可以做到這一點:最有用的函式是 lines()abline()points()text()
  • R 始終將圖形輸出到一個 裝置。通常這是一個螢幕上的視窗,但它也可以是一個 pdf 或其他圖形檔案(完整列表可以透過 ?device 找到)。這是將繪圖儲存到文件等中的方法之一。要在 (比如) pdf 檔案中儲存圖形,您需要使用 pdf() 啟用一個新的 pdf 裝置,執行您的常規圖形命令,然後使用 dev.off() 關閉裝置。這在下面的最後一個示例中得到了說明。
  • 不同的函式會根據 plot() 的第一個引數觸發。預設情況下,這些函式旨在生成合理的輸出。例如,如果它給出一個函式,比如 sqrt 函式,plot() 將生成 xsqrt(x) 的圖形;如果它給出一個數據集,它將嘗試以合理的方式繪製資料點(有關更多詳細資訊,請參閱 ?plot.function?plot.data.frame)。諸如顏色、樣式、專案大小以及軸標籤、標題等圖形細節,大多數可以透過 plot() 函式的其他引數來控制[2]
下面的示例從簡單開始,然後變得越來越詳細。建議初學者將每一行程式碼貼上到 R 中,一次一行,以檢視每個命令的效果。也建議進行實驗!
輸入
plot(sqrt)                              #Here we use plot() to plot a function 

plot(cars)                              #Here a dataset (axis names are taken from column names)

###Adding to an existing plot usually requires us to specify where to add
abline(a=-17.6, b=3.9, col="red")       #abline() adds a straight line (a:intercept, b:slope)
lines(lowess(cars), col="blue")         #lines() adds a sequence of joined-up lines
text(15, 34, "Smoothed (lowess) line", srt=30, col="blue")  #text() adds text at the given location
text(15, 45, "Straight line (slope 3.9, intercept -17.6)", srt=32, col="red") #(srt rotates)
title("1920s car stopping distances (from the 'cars' dataset)")

###plot() takes lots of additional arguments (e.g. we can change to log axes), some examples here
plot(cars, main="Cars data", xlab="Speed (mph)", ylab="Distance (ft)", pch=4, col="blue", log="xy")
grid()                                  #Add dotted lines to the plot to form a background grid 
lines(lowess(cars), col="red")          #Add a smoothed (lowess) line to the plot

###to plot to a pdf file, simply switch to a pdf device first, then issue the same commands
pdf("car_plot.pdf", width=8, height=8)  #Open a pdf device (creates a file)
plot(cars, main="Cars data", xlab="Speed (mph)", ylab="Distance (ft)", pch=4, col="blue", log="xy")
grid()                                  #Add dotted lines to the pdf to form a background grid 
lines(lowess(cars), col="red")          #Add a smoothed (lowess) line to the plot
dev.off()                               #Close the pdf device
結果
請注意,cars 資料集給出了以英尺為單位的制動距離和以英里/小時為單位的速度,因此此處生成的繪圖與圖 1.1 和 1.2 中的繪圖有所不同,因為那裡的資料已經轉換為公制單位。


  1. 本書中介紹的 R 知識還不足以完全解釋本章中使用的繪圖命令。不過,對於那些感興趣的人來說,對於任何繪圖,生成它的命令都列在影像摘要中(可以透過單擊影像檢視)。
  2. 不幸的是,大量可用引數的詳細資訊(其中許多引數在其他生成圖形的例程中很常見)分散在許多幫助檔案中。例如,要檢視在資料集上呼叫 plot() 時可用的選項,請參閱 ?plot?plot.default?par。要檢視在函式上呼叫 plot() 時可用的選項,請參閱 ?plot.function。在 points() 的幫助檔案中列出了指定各種繪圖符號的 pch 引數給出的數字(用於向繪圖新增點的函式):可以透過 example(points) 檢視它們。
華夏公益教科書