從qplot開始入門

本文使用的數據集爲ggplot2包自帶的diamonds數據集,其包含了約54000顆鑽石的價格和質量的信息。這組數據涵蓋了反映鑽石質量的四個“C”——克拉重量(carat)、切工(cut)、顏色(color)和淨度(clarity),以及五個物理指標——深度(depth)、鑽石寬度(table)、xyz。如下圖:

從qplot開始入門

本文使用的另一個數據集是原始數據的一個容量爲100的隨機樣本

set.seed(1410) #使樣本可重複

dsmall<-diamonds[sample(nrow(diamonds),100),]

1 基本用法

格式:qplot(x,y,data=data1)

例:qplot(carat,price,data=diamonds)

qplot(log(carat),log(price),data=diamonds)

顏色、大小、形狀和其他屬性

qplot(carat,price,data=dsmall,colour=color)

qplot(carat,price,data=dsmall,shape=cut)

qplot(carat,price,data=diamonds,aplha=I(1/100))

2 幾何對象geom

geom=”point” 可以繪製散點圖

geom=”smooth” 將擬合一條平滑曲線,並將曲線和標準誤展現在圖中

geom=”boxplot” 可以繪製箱線鬍鬚圖,可以概括一系列點的分佈情況

geom=”path” geom=”line” 可以在數據點之間繪製連線。線條圖只能創建從左到右的連線,而路徑圖則可以是任意方向。

對於一維的分佈,幾何對象的選擇是由變量的類型指定的:

對於連續變量,geom=”histogram”繪製直方圖,geom=”freqploy”繪製頻率多邊形,geom=”density”繪製密度曲線。

對於離散變量,geom=”bar”繪製條形圖。

例:向圖中添加平滑曲線

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

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

不繪製標準誤差

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

method參數選擇不同的平滑器(loess/gam/lm/rlm

method=”loess”,當n較小時是默認選項,使用的是局部迴歸的方法。曲線的平滑程度是由span參數控制的,其取值範圍是從0(很不平滑)到1(很平滑)

例:qplot(carat,price,data=dsmall,geom=c("point","smooth"),span=0.2)

Loess對於大數據並不十分適用,因此當n超過1000時,默認的是另一種平滑算法。

method=”gam”,formula=y~s(x)調用mgcv包擬合一個廣義可加模型。對於大數據,可使用y~s(xbs=”cs”),這是數據量超過1000時默認使用的選項。

method=”lm”擬合的是線性模型,默認情況下式一條直線,但可以指定formula=y~poly(x,2)來擬合一個二次多項式或加載splines包以使用自然樣條:formula=y~ns(x,2)。第二個參數是自由度:自由度取值越大,曲線的波動也越大。

例:library(splines)

qplot(carat,price,data=dsmall,geom=c("point","smooth"),method="lm",formula=y~ns(x,5))

method=”rlm”採用的是更穩健的擬合算法,使結果對異常值不太敏感。這個方法是MASS包的一部分,運用前需加載MASS包。

箱線圖和擾動圖

如果一個數據集中包含了一個分類變量和一個或多個連續變量,以上兩個圖可以描繪連續變量會如何隨着分類變量水平的變化而變化。

例:下圖展示了鑽石每克拉的價格隨顏色的變化情況

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

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

從qplot開始入門從qplot開始入門

 

直方圖和密度圖

直方圖和密度圖可以展示單個變量的分佈,如以下兩圖展示了鑽石重量的直方圖和密度圖。

例:qplot(carat,data=diamonds,geom="density")

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

其中直方圖可以通過設置binwidth參數設置組距的大小。

  從qplot開始入門從qplot開始入門

要在不同組之間對分佈進行對比,只需要加上一個圖形映射,如:

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

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

從qplot開始入門從qplot開始入門 

條形圖

在離散變量的情形下,條形題與直方圖相類似,繪製的方法是geom=”bar”。條形圖幾何對象會計算每一水平下觀測的數量,因此不需要預先對數據進行彙總。如果數據已經進行了彙總,或者想用其他的方式對數據進行分組處理(如對連續變量進行分組求和),可以使用weight幾何對象。

例:左圖是鑽石顏色的普通條形圖,右圖是按重量加權的條形圖

qplot(color,data=diamonds,geom="bar")

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

  scale_y_continuous("carat")

  從qplot開始入門從qplot開始入門

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

線條圖的X軸一般是時間,展示的是單個變量隨時間變化的情況,路徑圖則展示了兩個變量隨時間聯動的情況,時間反映在點的順序上。

使用economics數據集,它包含了美國過去40年的經濟數據,左圖展示了失業率的變化,右圖表示失業星期數的中位數。

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

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

 從qplot開始入門從qplot開始入門

下圖表示失業率和失業時間長度隨時間的變化的路徑。左圖有很多交叉,時間變化的方向並不明顯,右圖中將年份映射到了colour屬性屬性上,時間的行進方向更明顯。

qplot(unemploy/pop,uempmed,data=economics,geom=c("point","path"))

year<-function(x) as.POSIXlt(x)$year+1900

qplot(unemploy/pop,uempmed,data=economics,geom=c("point","path"),colour=year(date))

從qplot開始入門從qplot開始入門 

3 分面

之前利用利用圖形屬性(顏色和形狀)來比較不同分組的方法,它可以將所有的組繪製在同一張圖上。分面是另一種實現的方法:它將數據分割成若干子集,然後創建一個圖形的矩陣,將每一個子集繪製到圖形矩陣的窗格中。

qplot()默認的分面方面是將圖形拆分成若干個窗格,這可以通過形如row_var-col_var的表達式進行指定。可以指定任意數量的行變量和列變量,但當變量數超過兩個時,生成的圖形可能非常大,以至於不適合在屏幕上顯示。如果只想一行一列,可以使用.作爲佔位符,例如row_var~.會創建一個單列多行的圖形矩陣。

例:以顏色爲條件的重量的直方圖,右圖繪製的是比例,這使得比較不同組的分佈時不會受到該組樣本量大小的影響。

qplot(carat,data=diamonds,facets=color~.,geom="histogram",

      binwidth=0.1,xlim=c(0,3))

qplot(carat,..density..,data=diamonds,facets=color~.,

      geom="histogram",binwidth=0.1,xlim=c(0,3)

  從qplot開始入門從qplot開始入門

4 其他選項

qplot中還有一些其他的選項用於控制圖形的外觀。這些參數與在plot中的作用相同。

xlim,ylim:設置x軸和y軸的顯示區間,例xlim=c(0,20)

log:一個字符型向量,說明哪一個座標軸應該取對數,例log=”x”表示對x軸取對數,log=”xy”表示對x軸和y軸都取對數。

main:圖形的主題,參數可以是字符串,也可以是表達式

xlab,ylab:設置x軸和y軸的標籤文字,可以是字符串或數學表達式

例:

qplot(

  carat,price,data=dsmall,

  xlab="price($)",ylab="weight(carats)",

  main="price-weight relationship"

)

從qplot開始入門

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