R語言可視化 ggplot2—幾何對象

geom="point"可以繪製散點圖。這是當你指定了x和y參數給qplot()時默認的設置;
geom="smooth"將擬合一條平滑曲線,並將曲線和標準誤展示在圖中;
geom="boxplot"可以繪製箱線鬍鬚圖,用以概括一系列點的分佈情況;
geom="path"geom=“line"可以在數據點之間繪製連線。這類圖傳統的作用是探索時間和其他變量之間的關係,但連線同樣可以用其他的方式將數據點連接起來。線條圖只能創建從左到右的連線,而路徑圖則可以是任意的方向。

對於一維的分佈,幾何對象的選擇是由變量的類型指定的:
對於連續變量,geom="histogram"繪製直方圖,geom="freqpoly"繪製頻率多邊形,geom="density"繪製密度曲線。如果只有x參數傳遞給qplot(),那麼直方圖幾何對象就是默認的選擇;
對於離散變量,geom="bar"用來繪製條形圖。

向圖中添加平滑曲線

重量與價格的散點圖中加入了平滑曲線。上圖爲dsmall數據集,下圖爲完整數據集。

qplot(carat, price, data = dsmall, geom = c("point", "smooth"))
qplot(carat, price, data = diamonds, geom = c("point", "smooth"))

曲線的平滑程度是由span參數控制的,其取值範圍是從0(很不平滑)到1(很平滑)

上圖是 span=0.2,下圖是 span=1

qplot(carat, price, data = dsmall, geom = c("point", "smooth"), span = 0.2)#平滑度
qplot(carat, price, data = dsmall, geom = c("point", "smooth"), span = 1)

在這裏插入圖片描述
在這裏插入圖片描述
你可以使用method="gam"formula=y~s(x)來調用mgcv包擬合一個廣義可加模型。這與在lm中使用樣條相類似,但樣條的階數是通過數據估計得到的。

對於大數據,請使用公式formula=y~s(x,bs='cs'),這是數據量超過1000時默認使用的選項。

在運用廣義可加模型作爲平滑器時 formula 參數的作用。
上圖是formula=y~s(x),下圖是 formula=y~s(x,bs='cs')

library(mgcv)
qplot(carat, price, data = dsmall, geom = c("point", "smooth"), method = "gam", formula = y ~ s(x))
qplot(carat, price, data = dsmall, geom = c("point", "smooth"), method = "gam", formula = y ~ s(x, bs = "cs"))
#數據量超過1000時使用第二個

在這裏插入圖片描述
在這裏插入圖片描述
在運用線性模型作爲平滑器時 formula 參數的作用。
上圖是 formula=y~x 的默認值,下圖是 formula=y~ns(x, 5)

library(splines)
qplot(carat, price, data = dsmall, geom = c("point", "smooth"), method = "lm")
qplot(carat, price, data = dsmall, geom = c("point", "smooth"), method = "lm", formula = y ~ ns(x, 5))
#5是自由度,自由度越大,曲線波動越大

在這裏插入圖片描述
在這裏插入圖片描述

箱線圖與擾動點圖

利用擾動點圖(上)和箱線圖(下)來考察以顏色爲條件的每克拉價格的分佈。
隨着顏色的改變(從上到下),每克拉價格的跨度逐漸減小,但分佈的中位數沒有明顯的變化。

qplot(color, price/carat, data = diamonds, geom = "jitter")
qplot(color, price/carat, data = diamonds, geom = "boxplot")

在這裏插入圖片描述
在這裏插入圖片描述
每一種方法都有它的優勢和不足。箱線圖只用了5個數字對分佈進行概括,而擾動點圖可以將所有的點都繪製到圖中(當然會有圖形重疊的問題)。

在本例中,兩種圖形都顯示出每克拉價格的跨度與鑽石顏色是相關的,但箱線圖的信息更充分,它顯示出分佈的中位數和四分位數都沒有太大的變化。

擾動點圖中的圖形重疊問題可以通過半透明顏色來部分解決,也就是使用alpha參數。下圖展示了三種水平的透明度,這使得我們可以更清楚地看出數據集中的地方。這三張圖是用如下的代碼生成的:

改變 alpha 的取值,從上到下分別爲 1/5,1/50 和 1/200。隨着不透明度的降低,我們可以看出數據集中的地方。然而,箱線圖依然是一個更好的選擇。

qplot(color, price/carat, data = diamonds, geom = "jitter", alpha = I(1/5))
qplot(color, price/carat, data = diamonds, geom = "jitter", alpha = I(1/50))
qplot(color, price/carat, data = diamonds, geom = "jitter", alpha = I(1/200))

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
擾動點圖不能像箱線圖那樣顯示出四分位數的位置,但它體現了箱線圖所不能展示的其他一些分佈特徵。

對於擾動點圖來說,qplot可以提供像一般的散點圖那樣對其他圖形屬性的控制,例如sizecolourshape

對於箱線圖,你可以用colour控制外框線的顏色,用fill設置填充顏色,以及用size調節線的粗細。

另外一種考察條件分佈的方法是用分面來作出分類變量的每一個水平下連續變量的直方圖或密度曲線,這在後面的內容會進行介紹。

直方圖與密度曲線圖

展示鑽石重量的分佈。
上圖使用的是 geom='histogram'
右圖使用的是 geom=' density'

qplot(carat, data = diamonds, geom = "histogram")
qplot(carat, data = diamonds, geom = "density")

對於密度曲線圖而言,adjust參數控制了曲線的平滑程度(adjust取值越大,曲線越平滑)。對於直方圖,binwidth參數通過設定組距來調節平滑度。(切分位置同樣可以通過breaks參數進行顯式的指定。)

繪製直方圖或密度曲線時,對平滑程度進行試驗非常重要。在直方圖中,你應該嘗試多種組距:當組距較大時,圖形能反映數據的總體特徵;當組距較小時,則能顯示出更多的細節。
在這裏插入圖片描述
在這裏插入圖片描述

qplot(carat, data = diamonds, geom = "histogram", binwidth = 1, xlim = c(0, 3))
qplot(carat, data = diamonds, geom = "histogram", binwidth = 0.1, xlim = c(0, 3))
qplot(carat, data = diamonds, geom = "histogram", binwidth = 0.01, xlim = c(0, 3))

變動直方圖的組距可以顯示出有意思的模式。從上到下,組距分別爲1,0.1 和 0.01。只有重量在 0 到 3 克拉之間的鑽石顯示在圖中。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

要在不同組之間對分佈進行對比,只需要再加上一個圖形映射,如下面的代碼所示。

當一個分類變量被映射到某個圖形屬性上,幾何對象會自動按這個變量進行拆分。

上圖是重疊的密度曲線圖,下圖是堆疊起來的直方圖。

qplot(carat, data = diamonds, geom = "density", colour = color)
qplot(carat, data = diamonds, geom = "histogram", fill = color)

在這裏插入圖片描述
在這裏插入圖片描述
密度曲線圖在第一眼看來更吸引人,因爲它似乎很容易閱讀,而且適於在不同的曲線之間進行比較。然而,要真正理解密度曲線的含義則比較困難,而且密度曲線有一些隱含的假設,例如曲線應該是無界、連續和平滑的,而這些假設不一定適用於真實的數據。

條形圖

鑽石顏色的條形圖。上圖顯示的是分組的計數,下圖是按 weight=carat進行加權,展示了每種顏色的鑽石的總重量。

qplot(color, data = diamonds, geom = "bar")
qplot(color, data = diamonds, geom = "bar", weight = carat) + scale_y_continuous("carat")

在這裏插入圖片描述
在這裏插入圖片描述

時間序列中的線條圖和路徑圖

線條圖和路徑圖常用於可視化時間序列數據。線條圖將點從左到右進行連接,而路徑圖則按照點在數據集中的順序對其進行連接(線條圖就等價於將數據按照x取值進行排序,然後繪製路徑圖)。線條圖的x軸一般是時間,它展示了單個變量隨時間變化的情況。路徑圖則展示了兩個變量隨時間聯動的情況,時間反映在點的順序上。

由於鑽石數據中沒有包含時間變量,因此在這裏我們使用economics數據集,它包含了美國過去40年的經濟數據。

下圖展示了失業水平隨時間變化的兩張線條圖,它們是用geom="line"進行繪製的。

第一張圖顯示了失業率的變化,第二張圖是失業星期數的中位數。

我們已經可以看出這兩個變量之間的一些區別,例如在最後的一個峯值處,失業的比例要比前一個峯值低,但失業的時間卻要更長。

qplot(date, unemploy/pop, data = economics, geom = "line")
qplot(date, uempmed, data = economics, geom = "line")

衡量失業程度的兩張時序圖:
上圖是失業人口的比例,下圖是失業星期數的中位數;
圖形是用 geom='line' 進行繪製的。
在這裏插入圖片描述
在這裏插入圖片描述

要考察這種關係的更多細節,我們可以將兩個時間序列繪製在同一張圖中。儘管我們可以用一張散點圖來表示失業率和失業時間長度之間的關係,但我們並不能從中看出變量隨時間的變化。對此,解決的辦法是將臨近時點的散點連接起來,形成一張路徑圖。

在下面我們畫出了失業率和失業時間長度隨時間變化的路徑。由於線條有很多交叉,因此在第一張圖中時間變化的方向並不明顯。在第二張圖中,我們將年份映射到了colour屬性上,這讓我們能更容易地看出時間的行進方向。

year <- function(x) as.POSIXlt(x)$year + 1900
qplot(unemploy/pop, uempmed, data = economics, geom = c("point", "path"))
qplot(unemploy/pop, uempmed, data = economics, geom = "path", colour = year(date))

展示失業率和失業時間長度之間關係的路徑圖。上是重疊在一起的的散點圖和路徑圖,下圖只有路徑圖,其中年份用顏色進行了展示。
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章