1、簡單散點圖
使用geom_point()
函數即可繪制,并且在映射中可以使用以下映射參數:
-
shape
:指定形狀 -
colour
:填充(需要注意的是,fill對point可能不起作用) -
size
:修改大小
2、樣式修改
2.1 顏色修改
顏色的手動修改使用以下函數:
scale_colour_manual()
scale_colour_brewer()
2.2 形狀修改
- 使用
scale_shape_manual()
函數可以對形狀進行重新修改 - 使用
scale_size_area()
函數可以修改點大小(面積) - 需要注意的是,含有映射
shape
和size
時最好不要用來比較點
3、圖形重疊情況
3.1設定透明度
使用alpha=#
參數來設定透明度,降低圖形重疊情況
3.2將數據分箱(bin),并用矩形/六邊形表示
-
stat_bin2d()
表示矩形分箱 -
stat_binhex()
表示六邊形分箱
使用以上兩個函數時,需要對顏色進行調整,因此用到scale_fill_gradient()
函數
scale_fill_gradient(low='', high='', breaks=, limits=)
-
low
和high
是用于指定最小和最大色階 -
breaks
是用于將填充顏色進行分割(cut) -
limits
是限定色階的范圍
3.3添加隨機擾動點
當散點圖中其中一個數據軸或兩個數據軸都對應于離散型變量時,也會出現圖形重疊的情況,因此可以給數據添加隨機擾動點
geom_jitter()
4、添加回歸擬合線
4.1擬合直線
使用geom_smooth()
函數可以添加回歸擬合直線
-
se
參數控制置信區間,當se=F
時,表示不繪制置信區間;默認繪制 -
level
參數控制置信水平 -
linetype
、colour
、size
三個參數用于直線進行樣式調整 geom_smooth()
函數默認使用loess方法(局部加權多項式回歸)- 如果提前映射了
colour
和shape
參數,回歸會出現分組回歸的情況
4.2logit回歸曲線
使用stat_smooth()
可以設定回歸參數
-
method
用于指定回歸方法 -
method.args=list()
用于傳遞回歸方法的其他參數給stat_smooth()
- 如果想基于數據進行擬合外推,需要添加
fullrang=T
參數
4.3對模型添加擬合直線
可以在建立模型后使用predict()
函數預測,然后通過geom_line函數來添加模型的擬合線:
#建立模型
model <- lm(heightIn~ ageYear + I(ageYear^2), data=heightweight)
model
summary(model)
#設定預測數據
xmin <- min(heightweight$ageYear)
xmax <- max(heightweight$ageYear)
predicted <- data.frame(ageYear=seq(xmin, xmax, length.out = 100))
predicted$heightIn <- predict(model, predicted);predicted
#繪圖
sp <- ggplot(heightweight, aes(x=ageYear, y=heightIn)) +
geom_point(colour="grey40")
sp + geom_line(data=predicted, size=1)
5、添加文本注釋
使用annotate()
函數來對圖形進行注釋添加
annotate(geom, x=, y=, label="", parse=F)
-
geom
是指定添加注釋類型,如geom="text"
表示添加文本注釋 -
x
和y
是用來指定注釋的坐標 -
label
用來添加注釋內容 -
parse
默認不調用數學表達式語法,當parse=T
時會以數學表達式的形式表現注釋
6、添加標簽
- 可以使用
annotate()
函數來手動添加個別點的標簽 - 如果需要自動添加標簽,則使用
geom_text()
函數
geom_text(aes(label=), size=#, vjust=#, hjust=#)
- 直接將變量映射到
label
,然后通過size
來調整標簽大小避免重合 - 使用
vjust
和hjust
參數用于對標簽位置進行調整;但如果需要自動做出調整,則在aes
映射中對y-axis或x-axis加減一個單位
7、繪制氣泡圖
使用geom_point()
函數和scale_size_area()
函數組合即可繪制出氣泡圖;但實際上氣泡圖還是散點圖
library(gcookbook) #加載數據
cdat <- subset(countries, Year==2009 &
Name %in% c("Canada", "Ireland", "United Kingdom", "United States", "New Zealand", "Iceland", "Japan", "Luxembourg", "Netherlands", "Switzerland"))
p <- ggplot(cdat, aes(x=healthexp, y=infmortality, size=GDP)) +
geom_point(shape=21, colour="black", fill="cornsilk")
# 將GDP映射給半徑(scale_size_continuous的默認值)
p
# 將GDP映射給面積,得到略大的圓圈
p + scale_size_area(max_size=15)