R數據可視化第一彈之qplot()


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")

  

 

 原創文章,轉載請注明出處!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM