用圖層構建圖像
創建繪圖對象
需要使用ggplot2()
函數,兩個主要參數
- 數據
- 圖像屬性映射
aes()
通過ggplot創建圖形對象
p <- ggplot(diamonds, aes(carat, price, colour = cut))
圖層
給圖形對象添加一個“點”幾何對象(point geom)就會得到一個散點圖
p <- p + layer(geom = "point")
注意我們是如何用 + 來添加圖層的。該圖層使用了默認的數據集和圖形屬性映射,並且使用了另外兩個可選參數的默認值:統計變換和位置調整。下面的圖層設定列出了更多可選的參數選項。
手動創建圖形對象並添加圖層
p <- ggplot(diamonds, aes(x = carat))
p <- p + layer(geom = "bar",
geom_params = list(fill = "steelblue"),
stat = "bin",
stat_params = list(binwidth = 2))
p
應用“快捷函數”,得到與上例相同的圖形
p + geom_histogram(binwidth = 2, fill = "steelblue")
所有這類快捷函數都有相同的形式——以geom_或者stat_開頭
geom_XXX(mapping, data,.…, stat, position)
stat_XXX(mapping, data,…, geom, position)
其他參數後續內容會說明
下面將展示ggplot()和qplot()的等價用法
在用ggplot創建的圖形對象上添加圖層
ggplot(msleep, aes(sleep_rem/sleep_total, awake)) + geom_point()
# 等價於
qplot(sleep_rem/sleep_total, awake, data = msleep)
也可以給qplot添加圖層
qplot(sleep_rem/sleep_total, awake, data = msleep) + geom_smooth()
# 等價於
qplot(sleep_rem/sleep_total, awake, data = msleep, geom = c("point", "smooth"))
# 等價於
ggplot(msleep, aes(sleep_rem/sleep_total, awake)) + geom_point() + geom_smooth()
例:用不同的數據初始化後添加相同的圖層
圖層是普通的R對象,所以可以存儲到變量裏去,這有利於代碼避繁就簡。例如,一組圖形可以先用不同的數據來進行初始化,然後加上相同的圖層,如果後面想改變圖層,只需要修改一個地方即可。下面的例子創建了一個帶有半透明深藍色迴歸線的圖層。
library(scales)
bestfit <- geom_smooth(method = "lm", se = F, colour = alpha("steelblue", 0.5), size = 2)
qplot(sleep_rem, sleep_total, data = msleep) + bestfit
qplot(awake, brainwt, data = msleep, log = "y") + bestfit
qplot(bodywt, brainwt, data = msleep, log = "xy") + bestfit
用%*%添加新的數據集來代替原來的數據集
p <- ggplot(mtcars, aes(mpg, wt, colour = cyl)) + geom_point()
p
mtcars <- transform(mtcars, mpg = mpg^2)
p %+% mtcars
圖形屬性映射
aes函數的參數
aes(x = weight, y = height, colour = age)
這裏我們將x座標映射到weight
,y座標映射到height
,colour
映射到age
。前兩個參數可以省略名字,weight
和height
會自動匹配到x和y,這和qplot()
的用法是一致的。注意,你最好不要使用指定數據集以外的變量(例如diamonds$carat
),因爲這樣無法將繪圖所用的數據都封裝到一個對象裏。
也可以使用變量的函數值作爲參數
aes(weight, height, colour = sqrt(age))
圖和圖層
如下例所示,默認的圖形屬性映射可以在圖形對象初始化時設定,或者過後用+修改。
p <- ggplot(mtcars)
summary(p)
p <- p + aes(wt, hp)
summary(p)
使用默認的參數映射來添加圖層
p <- ggplot(mtcars, aes(x = mpg, y = wt))
p + geom_point()
修改圖形屬性。用factor(cyl)修改顏色(上),用disp修改y座標(下)。
p + geom_point(aes(colour = factor(cyl)))
p + geom_point(aes(y = disp))