1. 程式人生 > >第二篇:數據可視化 - 基本API

第二篇:數據可視化 - 基本API

數據挖掘 idt 示例 iyu 大小 blue .com sof 個性化

前言

數據可視化是數據挖掘非常重要的一個環節,它不單在查閱了解數據環節使用到,在整個數據挖掘的流程中都會使用到。

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

但在介紹統計圖的具體繪制之前,先來看看兩個基本的圖像繪制函數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

第二篇:數據可視化 - 基本API