天天看点

《R的极客理想—工具篇》—— 1.7 R语言的高质量图形渲染库Cairo

本节书摘来自华章出版社《r的极客理想—工具篇》一 书中的第1章,第1.7节,作者:张丹,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

问题

如何让r语言画出无锯齿的高清图?

《R的极客理想—工具篇》—— 1.7 R语言的高质量图形渲染库Cairo

引言

r语言不仅在统计分析和数据挖掘领域计算能力强大,它在数据可视化领域也不逊于昂贵的商业软件。当然,r在可视化上强大,其背后离不开各种开源软件包的支持,cairo就是这样一个用于矢量图形处理的类库。cairo可以创建高质量的矢量图形(gif、svg、 pdf、postscript) 和位图(png、jpeg、tiff),同时支持在后台程序中高质量渲染!本节将介绍cairo在r语言中的使用。

cairo 是一个用于图形绘图和渲染的免费库,支持复杂的 2d 的绘图功能,支持硬件加速。虽然,cairo 是用c语言编写的,但提供多种语言的接口,允许其他语言直接调用,包括有 c++、c#、java、python、perl、ruby、scheme、smalltalk 等语言。cairo发布的许可协议为 gnu lesser general public license version 2.1(lgpl) 或 mozilla public license 1.1(mpl)。

本节使用的系统环境是:

linux: ubuntu 12.04.2 lts 64bit

r: 3.0.1 x86_64-pc-linux-gnu

注 catools同时支持windows 7环境和linux环境。

cairo包在linux ubuntu系统中的安装过程如下:

cairo使用起来非常简单,和基础包grdevices中的函数对应。

cairopng: 对应grdevices:png()。

cairojpeg: 对应grdevices:jpeg()。

cairotiff: 对应grdevices:tiff()。

cairosvg: 对应grdevices:svg()。

cairopdf: 对应grdevices:pdf()。

我常用的图形输出,就是png和svg。下面检查cairo的兼容性:

从兼容性的检查结果,我们可以查看cairo支持的图形输出格式:

支持:png、jpeg、pdf、svg、ps、x11(linux桌面)、raster

不支持:tiff、win(win桌面)

注 如果是windows系统,则x11为false, win为true。

下面比较 cairopng() 和 png() 的输出效果。

散点图

首先我们来画一个6000个点的散点图。

在当前目录,会生成2个png文件,即plot4.png和cairo4.png,见图1-12和图1-13。

《R的极客理想—工具篇》—— 1.7 R语言的高质量图形渲染库Cairo
《R的极客理想—工具篇》—— 1.7 R语言的高质量图形渲染库Cairo

svg图形输出代码为:

在当前目录,会生成2个svg文件,即 plot-svg4.svg和cairo-svg4.svg,可以把svg的图片拖拽到浏览器中显示。

三维截面图

接下来,我们再画一个三维截面图,比较函数png()和cairopng()输出的效果。

在当前目录,会生成2个png文件,即plot2.png和cairo2.png,见图1-14和图1-15。

大量文字的图片

最后,我们针对包含大量文字的图片比较png()和cairopng()函数输出的效果。

《R的极客理想—工具篇》—— 1.7 R语言的高质量图形渲染库Cairo

在当前目录,会生成2个png文件,即plot5.png和cairo5.png,见图1-16和图1-17。

《R的极客理想—工具篇》—— 1.7 R语言的高质量图形渲染库Cairo
《R的极客理想—工具篇》—— 1.7 R语言的高质量图形渲染库Cairo

我们查看两个文件的属性,发现以png直接生成的图54kb,以cairopng生成的图43.8kb,如图1-18所示。

《R的极客理想—工具篇》—— 1.7 R语言的高质量图形渲染库Cairo

在当前目录,会生成2个svg文件,即plot-svg5.svg和cairo-svg5.svg。

就以上的3个例子来说,我们分辨不出cairopng() 和 png()之间有太大区别,只是cairo感觉更淡、更柔和一些。关于这一点谢益辉补充说,看不出区别是因为现在r的png()设备本来就是默认用cairo,几年前png()不用cairo,所以有时候png图的质量很差。多数情况下是几乎没有区别,只有少数情况下抗锯齿的表现不一样。

继续阅读