99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀R語言的高質(zhì)量圖形渲染庫(kù)Cairo
R語言的高質(zhì)量圖形渲染庫(kù)Cairo
2016-04-11
收藏
R語言的高質(zhì)量圖形渲染庫(kù)Cairo



R語言作為統(tǒng)計(jì)學(xué)一門語言,一直在小眾領(lǐng)域閃耀著光芒。直到大數(shù)據(jù)的爆發(fā),R語言變成了一門炙手可熱的數(shù)據(jù)分析的利器。隨著越來越多的工程背景的人的加入,R語言的社區(qū)在迅速擴(kuò)大成長(zhǎng)?,F(xiàn)在已不僅僅是統(tǒng)計(jì)領(lǐng)域,教育,銀行,電商,互聯(lián)網(wǎng)….都在使用R語言。

要成為有理想的極客,我們不能停留在語法上,要掌握牢固的數(shù)學(xué),概率,統(tǒng)計(jì)知識(shí),同時(shí)還要有創(chuàng)新精神,把R語言發(fā)揮到各個(gè)領(lǐng)域。讓我們一起動(dòng)起來吧,開始R的極客理想。


QQ截圖20160405160852.png

前言


R語言不僅在統(tǒng)計(jì)分析數(shù)據(jù)挖掘領(lǐng)域,計(jì)算能力強(qiáng)大。在數(shù)據(jù)可視化上,也不遜于昂貴的商業(yè)。當(dāng)然,背后離不開各種開源軟件包的支持,Cairo就是這樣一個(gè)用于矢量圖形處理的類庫(kù)。


Cairo可以創(chuàng)建高質(zhì)量的矢量圖形(PDF, PostScript, SVG) 和 位圖(PNG, JPEG, TIFF),同時(shí)支持在后臺(tái)程序中高質(zhì)量渲染!


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


目錄


  1. Cairo介紹

  2. Cairo安裝

  3. Cairo使用


1. Cairo介紹


在信息領(lǐng)域中,cairo 是一個(gè)讓用于提供矢量圖形繪圖的免費(fèi)庫(kù),cairo 提供在多個(gè)背景下做 2D 的繪圖,高級(jí)的更可以使用硬件加速功能。


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


2. Cairo安裝

系統(tǒng)環(huán)境


Linux: Ubuntu 12.04.2 LTS 64bit

R: 3.0.1 x86_64-pc-linux-gnu


Cairo基本庫(kù)安裝



~ 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使用起來非常簡(jiǎn)單,和基礎(chǔ)包grDevices中的函數(shù)對(duì)應(yīng)。


CairoPNG: 對(duì)應(yīng)grDevices:png()

CairoJPEG: 對(duì)應(yīng)grDevices:jpeg()

CairoTIFF: 對(duì)應(yīng)grDevices:tiff()

CairoSVG: 對(duì)應(yīng)grDevices:svg()

CairoPDF: 對(duì)應(yīng)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). 散點(diǎn)圖



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


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


QQ截圖20160405161032.png


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

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


數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請(qǐng)參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }