繪圖面(Facet)
善用 ggplot
的美學對應可以讓同一張圖形中的資料很方便的區分成不同的群組,而 ggplot
的繪圖面(facet)功能則提供另外一種資料區隔方式,它會先將資料分組後畫在表格式圖形中,而每一個子圖形的座標都相同,方便互相比較。
qplot
的繪圖面功能是使用 facets
參數配合公式的方式指定,公式的左邊是列(row)、右邊是行(column),例如:
qplot(carat, data = diamonds, facets = color ~ cut, geom = "histogram", binwidth = 0.1, xlim = c(0, 3))
若只需要對一個變數分組,則將公式另一側指定為一個句點(.
),例如:
qplot(carat, data = diamonds, facets = color ~ ., geom = "histogram", binwidth = 0.1, xlim = c(0, 3))
其他用法
qplot
還有一些可以調整圖形的參數,這些用法與傳統的 plot
參數類似。
xlim
、ylim
:設定 x 軸與 y 軸的繪圖範圍。log
:指定需要對數轉換的座標軸,例如log = "x"
就是將 x 軸經過對數轉換,而log = "xy"
則是讓 x 與 y 軸都經過對數轉換。main
:指定圖形的標題,可指定為一般的字串或是以expression
來表示的數學公式(詳細說明請參考plotmath
的線上說明)。xlab
、ylab
:指定 x 軸與 y 軸的名稱,其與main
一樣可以指定為字串或數學公式。
以下是一個使用範例:
qplot( carat, price, data = diamonds.subset, xlab = "Price ($)", ylab = "Weight (carats)", main = "Price-weight relationship" )
qplot( carat, price/carat, data = diamonds.subset, ylab = expression(frac(price,carat)), xlab = "Weight (carats)", main="Small diamonds", xlim = c(.2,1) )
qplot(carat, price, data = diamonds.subset, log = "xy")
qplot
與 plot
的差異
以下是 qplot
的一些注意事項,以及與傳統 plot
之間的一些主要差異:
qplot
並不是泛用型的函數,不像plot
可以接受各種的 R 物件,對不同類別的物件畫出不同的圖形。而ggplot
這個函數則是一個泛用型的函數,它可以建立一個繪圖的基礎物件,並配合其他函數產生各種圖形。- 一般來說美學對應都會指定為一個有興趣的變數,讓
ggplot
自動依據該變數畫圖,如果只是單純要指定一個固定值,可以使用I
函數,例如color = I("red")
。 - 傳統
plot
中的col
、pch
與cex
等參數也可以用於qplot
中,不過建議改用ggplot
本身的參數名稱會比較好記,例如:color
、shape
與size
。 - 在傳統的 R 繪圖系統上,若要在既有的圖形上增加元素,會使用
points
、lines
或text
這些函數,而在ggplot
系統中則會以增加圖層(layers)的方式處理。
qplot
範例
# 產生繪圖用的因子變數 mtcars$gear <- factor(mtcars$gear,levels=c(3, 4, 5), labels=c("3gears", "4gears", "5gears")) mtcars$am <- factor(mtcars$am,levels=c(0, 1), labels=c("Automatic", "Manual")) mtcars$cyl <- factor(mtcars$cyl,levels=c(4, 6, 8), labels=c("4cyl", "6cyl", "8cyl")) # 以 gear 分組畫出 mpg 密度函數圖 qplot(mpg, data = mtcars, geom = "density", fill = gear, alpha = I(.5), main="Distribution of Gas Milage", xlab="Miles Per Gallon", ylab="Density")
# 將資料以 gear 與 cylinder 分組, # 畫出 mpg 與 hp 的散佈圖, # 並且以資料點的顏色與形狀標示 am qplot(hp, mpg, data = mtcars, shape = am, color = am, facets = gear~cyl, size = I(3), xlab = "Horsepower", ylab = "Miles per Gallon")
# 畫出箱形圖, # 並且在上面用 jitter 資料點畫出實際資料的位置 qplot(gear, mpg, data = mtcars, geom = c("boxplot", "jitter"), fill = gear, main = "Mileage by Gear Number", xlab = "", ylab = "Miles per Gallon")