ggplot2之快速作圖qplot()
qplot()的意思是快速作圖,利用它可以很方便的創建各種復雜的圖形,其他系統需要好幾行代碼才能解決的問題,用qplot只需要一行就能完成。
本篇主要介紹:
- qplot()的基本用法
- 如何將變量映射到圖形屬性上(如大小、顏色和形狀等)
- 如何通過指定不同的幾何對象來創建不同類型的圖形,以及如何將他們組合在一張圖中
- 分面的應用,將數據拆分子集
1.數據集
首先我們示例使用的數據集是R自帶的diamonds數據集,包含54000顆鑽石的價格和質量信息。
我們同時使用一個小數據集dsmall,它是原始數據一個容量為100的隨機樣本,我們用這個數據集進行小數據的作圖展示。
>set.seed(123)#讓樣本可重復 > dsmall <- diamonds[sample(nrow(diamonds),100),]
2.基本用法
qplot()的前兩個參數是x和y,分別代表所畫對象的x坐標和y坐標,還有一個可選的data參數,如果進行指定,那么qplot()會首先在的數據框中查找變量名,然后再到R的工作空間中進行搜索。
下面是使用qplot()的一個簡單例子:
>qplot(carat,price,data=diamonds)
這張圖顯示了變量之間很強的相關關系,以及一些明顯的異常值,這些關系似乎是指數型的,我們接下來對變量進行一些變換:
> qplot(log(carat),log(price),data=diamonds)
現在這種關系就接近線性了,由於圖中的元素有很大的重疊,下結論時需要謹慎。如果我們研究體積(X*Y*Z)和其重量之間的關系,我們可以這樣:
> qplot(carat,x*y*z,data=diamonds)
我們可以看到,大部分的鑽石都落在同一條直線上,但依然存在一些大的異常點。鑽石的密度應該是一個常數,所以體積和重量之間應該是線性關系。
3.顏色、大小、形狀和其他屬性
我們在重量和價格的散點圖添加顏色和切工信息。
> qplot(carat,price,data=dsmall,colour=color)
> qplot(carat,price,data=dsmall,shape=cut) #形狀切工
顏色大小和形狀都是圖形屬性的具體例子,他們都是影響數據如何進行展示的視覺屬性。
使用半透明的顏色可以有效減少圖形元素重疊的現象,要創建半透明的顏色,可以使用alpha圖形屬性,其值從0(完全透明)到1(完全不透明)
>qplot(carat,price,data=diamonds,alpha=I(1/10)) >qplot(carat,price,data=diamonds,alpha=I(1/100))
不同類型的變量有不同適用的圖形屬性。例如,顏色和形狀適用於分類變量,而大小適用於連續變量。
4.幾何對象
4.1向圖形中添加平滑曲線
通過改變幾何對象(簡寫為geom),它幾乎可以畫出任何一種類型的圖形。下面這些幾何對象適用於考察二維的變量關系:
- geom = "point"可以繪制散點圖,這是當指定了x和y 參數給qplot的默認設置
- geom = "smooth"將擬合一條平滑曲線,並將曲線和標准誤差展現在圖中。
- geom = "boxplot"可以繪制箱線圖
- geom = "path"和geom="line"可以在數據點之間繪制連線,這類圖傳統的作用是探索時間和其他變量之間的關系。
對於一維分布,幾何對象的選擇是由變量的類型指定:
- 對於連續變量,geom = "histogram"繪制直方圖,geom="freqploy"繪制頻率多邊形,geom="density"繪制密度曲線。
- 對於離散變量,geom="bar"用來繪制條形圖。
如果在散點圖中有非常多的數據點,那么數據展示的趨勢可能並不明顯,在這種情況下應該在圖中添加一條平滑曲線,我們用c()將多個幾何對象組成一個向量傳遞給geom.
幾何對象會按照指定的順序進行堆疊。
> qplot(carat,price,data=dsmall,geom=c("point","smooth"))
灰色區域表示逐點的置信區間。
利用method參數可以選擇許多不同的平滑器:
- method = "loess",當n較小時是默認選項,使用的是局部回歸的方法。曲線的平滑程度是由span參數控制的,范圍從0(很不平滑)到1(很平滑)
> qplot(carat,price,data=dsmall,geom=c("point","smooth"),span=0.2) > qplot(carat,price,data=dsmall,geom=c("point","smooth"),span=1)
4.2箱線圖和擾動點圖
如果數據集中包含了一個分類變量和一個或多個連續變量,連續變量會如何隨着分類變量水平的變化而變化呢?箱線圖和擾動點圖提供了各自的方法達到這個目的。
> 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="boxplot")
箱線圖顯示了分布的中位數和四分位數都沒有太大的變化。
4.3直方圖和密度曲線圖
直方圖和密度曲線圖可以展示單個變量的分布,相對於箱線圖而言,它們提供了更多關於單個分布的信息,但不利於在不同組之間比較。
下圖展示了鑽石重量的直方圖和密度曲線圖:
> qplot(carat,data=diamonds,geom="histogram") > qplot(carat,data=diamonds,geom="density")
adjust控制密度曲線的平滑程度(取值越大越平滑),binwidth參數控制直方圖的組距,組距較小顯示更多細節,組距較大反應總體特征。
> 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="density",colour=color) > qplot(carat,data=diamonds,geom="histogram",fill=color)
4.4條形圖
在離散變量的情形下,條形圖和直方圖類似,繪制方法是geom="bar"
> qplot(color,data=diamonds,geom="bar")
4.5時間序列中的線條圖和路徑圖
線條圖是將點從左到右進行連接,而路徑圖則按照點在數據集中的順序對其進行連接。
由於diamonds中沒有包含時間變量,我們這里使用economics數據集,它包含美國過去40年的經濟數據。
下圖展示了失業率隨時間變化的線條圖:
> qplot(date,unemploy/pop,data=economics,geom="line")
我們將年份映射到屬性colour上,更容易看清時間的行進方向。
> year <- function(x) as.POSIXlt(x)$year +1900 >plot(unemploy/pop,uempmed,data=economics,geom="path",colour=year(date))
5.分面
分面將數據分割成若干子集,然后創建一個圖形矩陣,將每一個子集繪制到圖形矩陣的窗格中。
qplot()中默認分面方法是將圖形拆分成若干窗格,可以通過形如raw_var~col_var來指定。
..density..是一個新的語法,告訴ggplot2將密度而不是頻數映射到y軸。
>qplot(carat,..density..,data=diamonds,facets=color~.,geom="histogram",binwidth=0.1,xlim=c(0,3))
6.其他選項
qplot()中還有一些其他選項用於控制圖形外觀。
- xlim,ylim:設置x軸和y軸的顯示區間,例如xlim=c(0,20)
- log:對變量的對數操作
- main:圖形的主標題,以大字號顯示
- xlab,ylab:設置x軸和y軸的標簽文字
> qplot( + carat,price,data=dsmall, + xlab="Price ($)",ylab="Weight (carats)", + main = "Price-wight relationship")
原創文章,轉載請注明出處!