第二篇:資料視覺化 - 基本API

穆晨發表於2017-05-20

前言

       資料視覺化是資料探勘非常重要的一個環節,它不單在查閱瞭解資料環節使用到,在整個資料探勘的流程中都會使用到。

       因為資料視覺化不單可以形象地展示資料,讓你對資料有更好的總體上的瞭解,而且還可以讓你清晰的將自己的觀點表述出來。因此不僅僅是在專案實施環節,在與客戶談需求或者寫論文時,資料視覺化也能幫到你。

       但在介紹統計圖的具體繪製之前,先來看看兩個基本的影象繪製函式plot和legend。

繪圖基礎函式 - Plot

       在R語言中,plot是基本的用來繪製點和線段的函式。

       最基本的呼叫方式為:plot (x軸資料, y軸資料)。然而plot還提供了很多引數供以優化:

pch:用於顯示點的座標,可以是一個字元,也可以是0到25的一個整數。如:pch=“+”,pch=1
lty:線條型別。如:lty=2,lty=1
lwd:線條寬度。如:lwd=2
col:點,線,文字,填充區域的顏色設定,col.axis, col.sub, col.main分別對應座標軸標註,子標題,主標題顏色。如col=2, col.sub=2
font:字型設定。同上
cex:字元擴張率,這個值表示期望字元(包括繪圖字元)大小相對預設大小的比率。
xlim和ylim:表示x軸和y軸的長度,如:plot(passign, type="l", xlim=c(0,100))就表示x軸座標是從0到一百。
add=TRUE 強制函式以低階繪圖函式的形式執行,在當前的圖上載入新的圖形元素(僅適合於部分函式)。
axes=FALSE 禁止產生座標軸|當你想用函式axis() 繪製個性化的座標軸時非常有用。預設值是axes=TRUE,表示產生座標軸
log:log="x",log="y", log="xy"讓x 軸,y 軸或者兩者都成為對數座標軸,這對很多圖都有效,但不是全部。
type= 引數type= 控制輸出圖形(特別是線條)的型別:
type="p" 只顯示點(預設)
type="l" 顯示線條
type="b" (同時)顯示點和線
type="o" 將點覆蓋線上上
type="h" 繪製從點到零軸(x 軸)的垂直線(高密度(high-density))
type="s"
type="S" 步階圖。第一種形式,垂直線頂部匹配資料點;第二種形式,底部匹配。
type="n" 圖形不顯示。但是座標軸仍然顯示(預設),並且座標依然以資料設定。這個非常適合隨後用低階繪圖函式畫圖。
xlab=string/ylab=string:設定x 和y 軸的標籤。可以用這些引數修改預設標籤。預設標籤常常是用於高階繪圖函式中的物件的名字。

       在plot函式的基礎之上,可以畫點,畫線,新增文字。畫點和畫線的函式分別為points和lines函式,其呼叫方式比較簡單,這裡不再細說。

       下面再來介紹另一個重要的繪圖函式。

繪圖基礎函式 - legend

       legend(x, y, legend, ...)用來在當前圖的特定位置增加圖例(legend)。標識字元,線條格式,顏色等都是被字元向量legend中的標籤所註釋。另外一個含有畫圖單位對應值的引數v (一個和legend 長度一致的向量)是必須給定的:

legend( , fill=v)
- 填充盒子的顏色
legend( , col=v)
- 點或者線條的顏色
legend( , lty=v)
- 線條樣式
legend( , lwd=v)
- 線條寬度
legend( , pch=v)
- 標識字元(字元向量)

直方圖

       

       使用hist函式可以繪製出某列變數的直方圖,效果如上圖所示。它是保險索賠資料庫中索賠金額的直方分佈圖。

       該圖的函式呼叫程式碼為:

           

hist函式有以下幾個引數:
- 首參:資料向量
- density:直方圖陰影係數。值越大陰影度越高。
- main:直方圖示題名。如上圖的"Histogram of Freq of Insurance$Claims"。
- xlab:橫軸名
- ylab:縱軸名
- col,border:直方圖的顏色以及邊界顏色。可自定義色調風格,但是與density引數互斥。
- break:分組間距

條形圖

       

       該圖是保險索賠資料集中索賠人年齡的條形分佈圖。

       可見,條形圖與直方圖比較相似,但它的特點是需要定製每個區間,因為這些區段之間表達的意義也許是沒有任何聯絡的。同時,它可以很好地處理非數值型的資料統計。因此,這種圖形的使用頻率也相當高,應當引起重視。

       一般來說,繪製條形圖需要以下兩個步驟:

1. 生成統計向量。也就是說,每個條形表示的值具體是多少。
本例中的呼叫程式碼為:

       

       生成的向量為索賠人年齡在各個區間內的人數。

       2. 進行繪製。

       呼叫程式碼為:

       

       barplot函式有以下幾個引數:

- 首參:資料向量,這個常常需要自行計算來定製。
- names.arg:各條形的名字
- density,main,xlab,ylab,col,denstity:意義同直方圖。不過col,denstity引數為向量格式 - 為了分別定製每個條形。
- besides:是繪製分組條形圖,還是堆疊條形圖。該引數的具體使用下面會說。

需要特別說明的是,柱狀圖更為常用的地方在於繪製分組條形圖,如下圖所示:

       

       要繪製這種條形圖,在上圖的基礎上,需要作出如下的改動:

       1. 生成兩組統計向量,並將它們通過函式rbind給繫結起來:

       

       2. 在繪製函式barplot中,加入引數設定beside=TRUE:

       

       如果不加的話會自動生成疊加風格的條形圖:

       

       3. 最後,在圖的左上方加上這不同兩個條形的具體意義:

       

 餅圖

       

       本例子展示的是一個3D圖。它需要使用一個新的包plotrix。餅圖的繪製比較簡單,呼叫程式碼示例如下:

       

       主要說明的是如下兩個引數:

       - explode:這個引數就是各個餅成員之間的間距
       - labelcex:各個餅之間的縫隙大小

       其他引數和前面幾個圖的繪製函式的差不多,不再累述了。

中文字元相容性解決方案

       在匯出為高清pdf格式的時候,有時候會有中文字元不相容的問題。解決方案為:

1. 安裝Cario軟體包並載入
2. 呼叫函式CairoPDF("PDF完整路徑名")指定PDF檔案儲存路徑及檔名
3. 在呼叫繪圖函式時加上一個新的引數 family = "字型名"。字型參數列見文章尾部。
4. 語句dev.off執行儲存

       下面是一段儲存高清pdf的程式碼示例:

library(Cairo)
CairoPDF("f:\\1.pdf")
pie3D(Claims_Age, labels=c("<25", "25-29", "30-35", ">35"), explode = 0.1, labelcex = 0.8, main = "中文字元", col = c("green", "blue", "orange", "yellow"), family = "SimSun")
dev.off()

小結

       R語言還支援很多型別的圖,有些複雜點的圖甚至獨立成了一個專門的包。可根據實際的需要進行選擇並繪製。

附字型參數列:

1 新細明體 PMingLiU
2 細明體 MingLiU
3 標楷體 DFKai-SB
4 黑體 SimHei
5 宋體 SimSun
6 新宋體 NSimSun
7 仿宋 FangSong
8 楷體 KaiTi
9 仿宋_GB2312 FangSong_GB2312
10 楷體_GB2312 KaiTi_GB2312
11 微軟正黑體 Microsoft JhengHei
12 微軟雅黑 Microsoft YaHei
13 隸書 LiSu
14 幼圓 YouYuan
15 華文細黑 STXihei
16 華文楷體 STKaiti
17 華文宋體 STSong
18 華文中宋 STZhongsong
19 華文仿宋 STFangsong
20 方正舒體 FZShuTi
21 方正姚體 FZYaoti
22 華文彩雲 STCaiyun
23 華文琥珀 STHupo
24 華文隸書 STLiti
25 華文行楷 STXingkai
26 華文新魏 STXinwei

相關文章