熱線電話:13121318867

登錄
首頁精彩閱讀R語言的高質量圖形渲染庫Cairo
R語言的高質量圖形渲染庫Cairo
2016-04-11
收藏
R語言的高質量圖形渲染庫Cairo



R語言作為統計學一門語言,一直在小眾領域閃耀著光芒。直到大數據的爆發,R語言變成了一門炙手可熱的數據分析的利器。隨著越來越多的工程背景的人的加入,R語言的社區在迅速擴大成長?,F在已不僅僅是統計領域,教育,銀行,電商,互聯網….都在使用R語言。

要成為有理想的極客,我們不能停留在語法上,要掌握牢固的數學,概率,統計知識,同時還要有創新精神,把R語言發揮到各個領域。讓我們一起動起來吧,開始R的極客理想。


QQ截圖20160405160852.png

前言


R語言不僅在統計分析,數據挖掘領域,計算能力強大。在數據可視化上,也不遜于昂貴的商業。當然,背后離不開各種開源軟件包的支持,Cairo就是這樣一個用于矢量圖形處理的類庫。


Cairo可以創建高質量的矢量圖形(PDF, PostScript, SVG) 和 位圖(PNG, JPEG, TIFF),同時支持在后臺程序中高質量渲染!


本文將介紹,Cairo在R語言中的使用。


目錄


  1. Cairo介紹

  2. Cairo安裝

  3. Cairo使用


1. Cairo介紹


在信息領域中,cairo 是一個讓用于提供矢量圖形繪圖的免費庫,cairo 提供在多個背景下做 2D 的繪圖,高級的更可以使用硬件加速功能。


雖然 cairo 是使用C語言撰寫的,但是當使用 cairo 時,可以用許多其他種語言來使用,包括有 C++、C#、Java、Python、Perl、Ruby、Scheme、Smalltalk 以及許多種語言,cairo 在 GNU LGPL 與 Mozilla Public License (MPL) 兩個認證下發布。


2. Cairo安裝

系統環境


Linux: Ubuntu 12.04.2 LTS 64bit

R: 3.0.1 x86_64-pc-linux-gnu


Cairo基本庫安裝



~ sudo apt-get install libcairo2-dev
~ sudo apt-get install libxt-dev

~ R 
> install.packages("Cairo")
** R
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
Warning: ignoring .First.lib() for package ‘Cairo’
* DONE (Cairo) 


3. Cairo使用


Cairo使用起來非常簡單,和基礎包grDevices中的函數對應。


CairoPNG: 對應grDevices:png()

CairoJPEG: 對應grDevices:jpeg()

CairoTIFF: 對應grDevices:tiff()

CairoSVG: 對應grDevices:svg()

CairoPDF: 對應grDevices:pdf()


我常用的圖形輸出,就是png和svg。

檢查Cairo的兼容性:



~ R

> library(Cairo)
> Cairo.capabilities()
   png   jpeg   tiff    pdf    svg     ps    x11    win raster
  TRUE   TRUE  FALSE   TRUE   TRUE   TRUE   TRUE  FALSE   TRUE 



下面比較一下 CairoPNG() 和 png() 輸出效果。


1). 散點圖



x<-rnorm(6000)
y<-rnorm(6000)

# PNG圖
png(file="plot4.png",width=640,height=480)
plot(x,y,col="#ff000018",pch=19,cex=2,main = "plot")
dev.off()

CairoPNG(file="Cairo4.png",width=640,height=480)
plot(x,y,col="#ff000018",pch=19,cex=2,main = "Cairo")
dev.off()

# SVG圖
svg(file="plot-svg4.svg",width=6,height=6)
plot(x,y,col="#ff000018",pch=19,cex=2,main = "plot-svg")
dev.off()

CairoSVG(file="Cairo-svg4.svg",width=6,height=6)
plot(x,y,col="#ff000018",pch=19,cex=2,main = "Cairo-svg")
dev.off() 



以下為PNG圖:


QQ截圖20160405160941.png

QQ截圖20160405160949.png


2). 三維截面圖



x <- seq(-10, 10, length= 30)
y <- x
f <- function(x,y) { r <- sqrt(x^2+y^2); 10 * sin(r)/r }
z <- outer(x, y, f)
z[is.na(z)] <- 1

# PNG圖
png(file="plot2.png",width=640,height=480)
op <- par(bg = "white", mar=c(0,2,3,0)+.1)
persp(x, y, z,
theta = 30, phi = 30,
expand = 0.5,
col = "lightblue",
ltheta = 120,
shade = 0.75,
ticktype = "detailed",
xlab = "X", ylab = "Y", zlab = "Sinc(r)",
main = "Plot"
)
par(op)
dev.off()

CairoPNG(file="Cairo2.png",width=640,height=480)
op <- par(bg = "white", mar=c(0,2,3,0)+.1)
persp(x, y, z,
theta = 30, phi = 30,
expand = 0.5,
col = "lightblue",
ltheta = 120,
shade = 0.75,
ticktype = "detailed",
xlab = "X", ylab = "Y", zlab = "Sinc(r)",
main = "Cairo"
)
par(op)
dev.off() 



以下為PNG圖:


QQ截圖20160405161001.png

QQ截圖20160405161010.png


3). 文字顯示



library(MASS)
data(HairEyeColor)
x <- HairEyeColor[,,1]+HairEyeColor[,,2]

n <- 100
m <- matrix(sample(c(T,F),n^2,replace=T), nr=n, nc=n)

# PNG圖
png(file="plot5.png",width=640,height=480)
biplot(corresp(m, nf=2), main="Plot")
dev.off()

CairoPNG(file="Cairo5.png",width=640,height=480)
biplot(corresp(m, nf=2), main="Cairo")
dev.off()

# SVG圖
svg(file="plot-svg5.svg",width=6,height=6)
biplot(corresp(m, nf=2), main="Plot-svg")
dev.off()

CairoSVG(file="Cairo-svg5.svg",width=6,height=6)
biplot(corresp(m, nf=2), main="Cairo-svg")
dev.off() 



以下為PNG圖:


QQ截圖20160405161018.png

QQ截圖20160405161025.png


我們查看兩個文件的屬性:以png直接生成的圖54KB,以CairoPNG生成的圖43.8KB。


QQ截圖20160405161032.png


綜上的3個例子,我分辨不出太大區別,只是Cairo感覺更淡、更柔和一些。

大家不妨找一些更復雜的圖形來嘗試著比較。


數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢