散點圖一般是用來表述兩個連續變量之間的關係,圖中的每一個點表示目標數據集中的每一個樣本。函數
同時散點圖中經常還會擬合一些直線,以用來表示某些模型。測試
本例選用以下測試數據集:spa
繪製方法是首先調用ggplot函數選定數據集,並在aes參數中指明橫軸縱軸。而後調用散點圖函數geom_point()即可繪製出基本散點圖。R語言示例代碼以下:3d
# 基函數 ggplot(ah, aes(x = ageYear, y = heightIn)) + # 散點圖函數 geom_point()
運行結果:blog
本例選用以下測試數據集:it
繪製方法是在基礎散點圖之上再在基函數的美學參數集裏設置一個美學變量。可指定colour或者shape兩種參數,分別將不一樣分組以不一樣顏色/點形表述。R語言示例代碼(基於顏色分組)以下:io
# 基函數:colour設置分組 ggplot(sah, aes(x = ageYear, y = heightIn, colour = sex)) + # 散點圖函數 geom_point()
運行結果:function
R語言示例代碼(基於點形分組)以下:class
# 基函數:shape設置分組 ggplot(sah, aes(x = ageYear, y = heightIn, shape = sex)) + # 散點圖函數 geom_point()
運行結果:dva
說明:可自定義點形,共有大概36種點形可供選擇。具體請參考R語言ggplot2手冊。
本例選用以下測試數據集:
上一個示例中,映射到分組的變量是離散型變量。而對於除了橫軸縱軸以外的連續型變量,也能夠映射到散點圖的色深和點大小上。R語言示例代碼(綁定顏色)以下:
# 基函數:colour綁定連續變量 ggplot(sahw, aes(x = ageYear, y = heightIn, colour = weightLb)) + # 散點圖函數 geom_point()
運行結果:
R語言示例代碼(綁定大小)以下:
# 基函數:size綁定連續變量 ggplot(sahw, aes(x = ageYear, y = heightIn, size = weightLb)) + # 散點圖函數 geom_point()
運行結果:
本例選用以下測試數據集:
若是圖中的散點重疊現象比較嚴重,能夠在散點圖中設置散點的透明度來進行可視化。R語言示例代碼以下:
# 基函數:size、colour分別綁定連續變量 ggplot(sahw, aes(x = ageYear, y = heightIn, size = weightLb, colour = sex)) + # 散點圖函數:alpha設置散點透明度 geom_point(alpha = .5) + # 使散點的面積正比與變量值 scale_size_area() + # 標尺函數:palette設置配色方案 scale_colour_brewer(palette = "Set1")
運行結果:
本例選用以下測試數據集:
若是須要網散點圖中添加回歸模型擬合線,最主要是調用stat_smooth()函數。R語言示例代碼以下:
# 基函數:sex綁定離散變量 ggplot(sah, aes(x = ageYear, y = heightIn, colour = sex)) + # 散點圖 geom_point() + # 標尺函數:palette設置配色方案 scale_colour_brewer(palette = "Set1") + # 擬合迴歸線段以及置信域(默認0.95/經過level參數可自定義) geom_smooth()
運行結果:
線段爲曲線是由於參與擬合模型爲局部線性迴歸模型。往geom_smooth()函數中加入"method = lm"便可擬合經典線性迴歸。結果以下圖:
本例選用以下測試數據集:
上面一小節展現了用全局/局部迴歸模型擬合樣本點並展現擬合線段,它使用ggplot2提供的geom_smooth()函數自動擬合併完成繪製。
但在更多時候,咱們會使用其餘包的模型(非ggplot2內置模型)擬合。針對這種狀況,咱們須要自定義一個函數。該函數接受模型、橫縱軸名、橫軸範圍、橫軸樣本點數量等參數,輸出一個包含預測變量和預測值的數據框。R語言實現代碼以下:
# 函數功能:輸出模型預測結果 # 參數說明: # model: 模型變量 # xvar: 預測變量集 # yvar: 實際變量集 # xrange: 預測變量取值範圍 # samples: 預測變量個數 # 函數輸出:實際值 - 預測值數據集 predictvals = function(model, xvar, yvar, xrange = NULL, samples = 100, ...) { # 模型爲lm/glm/loess其中一種的話可自動生成xrange if (is.null(xrange)) { if (any(class(model) %in% c("lm", "glm"))) xrange = range(model$model[[xvar]]) else if (any(class(model) %in% "loess")) xrange = range(model$x) } # 生成並返回實際值 - 預測值數據集 newdata = data.frame(x = seq(xrange[1], xrange[2], length.out = samples)) names(newdata) = xvar newdata[[yvar]] = predict(model, newdata = newdata, ...) newdata }
在使用其餘模型建模好以後,將新的模型等各參數傳遞進上述函數,便獲得預測結果數據集。最後將新的數據集輸出爲折線圖便可。
下面展現一個略微複雜的例子,它將數據集根據不一樣性別分爲兩組,分別創建迴歸模型並繪製其擬合線。R語言實現代碼以下:
# 建模函數:在這裏設置模型 make_model = function(data) { loess(heightIn ~ ageYear, data) } # 按性別切割數據集並返回模型列表 models = dlply(sah, "sex", .fun = make_model) # 對不一樣數據集(男/女)進行預測 predvals = ldply(models, .fun = predictvals, xvar = "ageYear", yvar = "heightIn") # 繪製數據集散點圖以及模型擬合線 ggplot(sah, aes(x = ageYear, y = heightIn, colour = sex)) + geom_point() + geom_line(data = predvals)
運行結果:
本例選用以下測試數據集:
方法很簡單,在原先散點圖繪製函數的基礎上增長邊際地毯函數就行。R語言實現代碼以下:
# 基函數 ggplot(faithful, aes(x = eruptions, y = waiting)) + # 散點圖函數 geom_point() + # 邊際地毯函數 geom_rug()
運行結果:
本例選用以下測試數據集:
往散點圖中添加標籤的方法也很簡單,在原有散點圖函數的基礎上增長文本函數便可。R語言實現代碼以下:
# 基函數 ggplot(cty_1, aes(x = healthexp, y = infmortality)) + # 散點圖函數 geom_point() + # 文本函數:aes參數中:y將原有縱軸值向上偏移,label設置綁定文本 # 將y軸偏移的目的是爲了讓文本展現在樣本點上方而不是中間 geom_text(aes(y = infmortality + .2, label = Name))
運行結果:
PS:該示例中咱們在文本繪製函數中重定義了美學特徵集。以後文本繪製函數將使用新的美學特徵集,但其餘繪製函數的不變。