第三篇:數據可視化 - ggplot2


前言

        R語言的強大之處在於統計作圖。其中統計部分的內容很多很強大,因此會在以后的實例中逐步介紹;而作圖部分的套路相對來說是比較固定的,現在可以先對它做一個總體的認識。

       在上一篇文章中,介紹了使用graphics庫進行繪圖的方法,而本文將引入一個更為強大的庫 --- ggplot2,它能做出各式各樣,非常酷炫的統計圖(甚至地圖,熱圖等)。

       本文將結合一個實際項目中的例子講解如何使用ggplot2繪圖。

ggplot繪圖總體步驟

1. 調用ggplot函數設置圖形基本信息 --- 如:使用的數據集,x軸y軸向量,分類向量等最為基礎的特征。

2. 調用各種繪圖函數繪制各類圖形 -- 如:條形圖(geom_bar),直方圖(geom_histogram),散點圖(geom_point)等。

3. 調用各種標度函數對圖形進行調整 --- 如:調整坐標軸(scale_x_continuous),調整色彩(scale_colour系列),調整圖例(scale_fill系列)等。

4. 調用annotate函數往圖形中添加注解。

5. 調用theme函數以對圖形進行最終美化。一般來說這個函數是僅僅對外觀因素進行美化,和具體數據不打交道。

       特別強調的是第五點theme函數特別強大,能定制出非常酷炫的效果。

一個雙柱狀圖+折線圖的繪制實例

       本例需要生成的是一個用戶在過去一段時間內,觀看韓劇以及非韓劇節目的時間隨時間變化的雙柱狀圖,同時,要在這個圖形上用折線圖繪制所有用戶觀看韓劇/非韓劇的平均時間。

       第一步:獲取基礎數據集(僅顯示部分)

       

       該數據集中,每行代表該用戶的一次觀看記錄。

       各字段說明:

- DEVICE_ID:用戶標識
- WATCH_TIME:觀看時間
- WATCH_DURATION:觀看時長
- ISKD:該節目是否為韓劇
- PERTIME:所有用戶的平均觀看時長

第二步:數據清洗

       在剛從文本中獲取到數據后,數據類型有可能不是你所期望的。

       比如我的這個例子中,獲取到的WATCH_TIME是因子類型,這顯然不合我意。於是我將它轉換成了時間類型。另外ISKD因為待會要拿他作為兩個柱狀的區分條件,因此將它轉換為因子類型。至於觀看時間,由於精度要求不高,因此直接轉換為整型。

       另外,第一列的數據沒用到(用戶的設備ID),因此剔除掉。

       

       清洗完畢后的數據集如下:

       

       第三步:構建圖形基礎函數變量
       

       這一步生成的graph_base變量表示,使用data數據集,橫軸為觀看時間,縱軸為觀看時長,根據該劇目是否為韓劇進行分類,且縱軸最大值為觀看時間的最大值。

       這些基礎信息都可以保存在這樣的一個變量里,隨掉隨用。

       第四步:繪制韓劇/非韓劇觀看時長雙柱狀圖

       

       繪制函數中的參數與該圖形顯示有關,其中stat表示取觀看時長的具體值,position表示雙柱狀是左右並列顯示。

       注意是在上一步的基礎圖形信息變量上加上繪制函數,這就仿佛在基礎圖層之上添加了一個圖層。

       第五步:繪制平均觀看時長折線圖

       

       另外兩行代碼則進行描點,顯示具體值的操作。

       注意同樣是在上一步生成的變量之上疊加圖層。

       第六步:對坐標軸進行調整

       

       這段代碼將橫坐標軸進行了格式化(具體參數請查閱相關手冊)以及一定的美化。

       所謂的坐標軸,或者下面要修改的圖例都可以統稱為標度。ggplot各種各樣的標度函數,其形式大約都是scale_xx_xx這樣。

       第七步:設置標題,圖例等信息

       

       這一步對圖中的圖例以及圖像的標題進行了較為細致的調整,使得圖像看起來更加美觀。

       另外繪制柱狀圖圖例的時候也順便為柱狀圖設置了主題色Pastel1。

       第八步:保存繪制結果:

       還可以保存為pdf格式之類的,非常方便。

結果展示

       

 

小結

       本文僅僅是從一個實例出發,講解ggplot2繪圖的基本框架步驟。對於其他細節,請讀者在具體使用到的時候再去專門查詢,沒必要一次學會。

       最后推薦一本書《R數據可視化手冊》。 


免責聲明!

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



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