《R绘图系统(第2版)》一第1章 R绘图简介1.1 R 绘图示例

简介:

本节书摘来自异步社区《R绘图系统(第2版)》一书中的第1章,第1.1节,作者【新西兰】Paul Murrell,更多章节内容可以访问云栖社区“异步社区”公众号查看

第1章 R绘图简介

R绘图系统(第2版)
章节预览

本章介绍了关于R绘图入门最基本信息。首先,这里用一个3行的代码示例阐述如何用最基本的步骤去绘制一个图形。然后用一系列的示例展示R能够生成的图像种类。最后,用一节的内容介绍R如何组织其图形库,帮助读者寻找特定的函数。
下面这段代码展示了如何用R去绘制一幅图形(见图1.1)

> plot(pressure)
> text(150,600,
     "Pressure (mm Hg)\nversus\nTemperature (Celsius)")

表达式 plot(pressure) 绘制了一幅反映压强和温度关系的散点图,图中包含了坐标轴,坐标轴标签以及矩形边框。调用text() 函数在图中坐标为(150,600)的位置添加文本标签。

这个例子只是R基础绘图的一个缩影,为了绘制图形并将其显示出来,用户需要调用一系列的图形函数,每一个图形函数或者能绘制出完整的图形,或者在已绘制图形的基础上添加新的元素。R的图形绘制模式遵循“画家模型”,即在当前一步绘制一个元素,在接下来的步骤中根据当前已绘制的图形添加元素。


b73881f37657a2a86542cc04778031cd64fb81d4

图1.1 一幅简单的散点图,该图表示水银气压温度计中水银压强作为温度的函数随着温度变化的走势。这里用到了两个R表达式:一个表达式绘制基本图形,并包括了坐标轴、数据标签以及矩形框,另一个表达式在图形中添加了文本标签。

R 以及R的扩展包提供了许多绘图函数,因此,在描述单个绘图函数之前,1.1节展示了R所能绘制的各种各样的图形。这为R用户提供了如何利用R绘图系统绘制他们所希望得到的图形的思路。

第2节将简要介绍R中的绘图函数是如何组织的,这将为用户寻找完成特定任务的函数提供一些基本的思路。在本章的末尾,读者将会开始了解R的核心绘图函数的更多细节。

1.1 R 绘图示例

本节将通过一系列的示例方法来介绍R的绘图功能。生成这些图形的源代码不在本书中列出,读者可以到本书提到的网站下载这些源代码。这样做的原因是作者希望通过这些图形使读者对R 绘图系统有一个总体的印象。

1.1.1 标准绘图

R 提供了标准统计图形所囊括的通用工具,包括散点图、箱线图、直方图、条形图、饼图以及基本的三维图形。图1.2展示了一些例子。


d56243d4b4ca0b563993a338a2445df656c98a73

图1.2 R绘制的一些标准图形:(顺序依次是从左到右和从上到下)散点图、直方图、条形图、箱线图、三维图以及一个饼图。在前4个例子中,在标准图形类型的基础上通过添加额外的标签、线段和坐标轴来实现对图形的扩充。

在R中,基本的绘图类型可以通过一个简单的函数调用绘制(例如pie(pie.sales),将会绘制一个饼图),但是这些图形也会被当作绘制更复杂图形的起点。例如,在图1.2的左上角的散点图中,一个文本标签被添加到图形区域内(这样就可以标明一个对象的识别编号),同时,在图形的右侧,添加了第二个y坐标轴。类似的,在直方图中,添加了一条曲线来对比理论正态分布与观测对象的差异。条形图中,在构成条形的每个元素中添加一个数字标签来表示每个元素对总的条形的贡献,此外,在箱线图中添加了图例来区分已绘制的不同数据对象。

在基本图形单元的基础上添加更多图形单元来绘制最后的完整图形是R的基本特性。图1.3展示了这种灵活性,在这幅图中,展示了如何通过统计散落在考古遗迹内破损碎片数量来对器皿的原始数量进行估计:根据遗迹上的碎片来度量遗迹的“完整性”;再根据观测到的“完整性”,通过“完整性”和“抽样比”的理论关系曲线来推测出“抽样比”的估计范围;另一条理论关系曲线则确定了给定一个抽样比所对应的原始容器数量。该图基于散点图,但是要求有额外的曲线、多边形、以及文字段,还要叠加多个坐标系统来绘制最后的结果。


ea3a39c3ffaffedacad6997bbf9df450a35dda07

图1.3 一幅用R绘制的自定义散点图。该图是从一个简单的散点图开始,通过添加一条额外的y轴和一系列额外的由线段、多边形以及文本标签所组成的集合而绘制完成的。

R绘图系统允许精确地控制绘图的底层部分,这样的特性使得R所绘制的图形能够创造很多引人注目的效果(会有从数据中丢失信息的风险)。图1.4则给出了这样一个例子,在这个例子中,只是用简单的条形图来反映老虎种群的数量,但是整个图形却被一只老虎头像的图片所修饰。


e716b26ddc466f31c84c5bfabf650acb3c8acecb

图1.4 一幅用R绘制的生动的条形图。该图通过在一个简单的条形图基础上,添加浅灰色背景图像并且将图像与每个条形重合的部分重新加亮来实现。

更多关于使用R绘图函数绘制标准图形的内容,见于第2章。第3章则阐述了更多在绘图时添加图形元素的方法。

1.1.2 框架图(Trellis plots)

除了传统的统计绘图,R 还通过Deepayan Sarkar开发的lattice包实现了绘制框架图的方法。框架图包含了大量由BillCleveland提出的设计原则,其目的是确保通过统计图形准确而忠实地传递背后数据的信息。在框架图中,这些原则贯穿于大量新型绘图类型以及默认颜色,符号形状以及线条样式的选择。此外,框架图还提供了一项特性:“条件多框图”,将数据按其他因子的水平分割成数据的不同子集,并逐子集绘制出一个多框统计图形。

图1.5展示了框架图的一个例子。采集到的数据表示的是在过去两年中,6个地点种植的不同品种的大麦的产量。该图由6个框图组成,每个框图对应一个地点。每个框图由一个表示不同品种产量的单点图组成,使用不同的符号来区分不同的年份,并且在框图上方用一个条带显示地点的名称。


bf2b01e8a40babfb4215c73c075e1a53cdec5b87

图1.5 由lattice 包绘制的单点框架图。该图展示了大麦产量和大麦品系之间的关系,不同的单点图对应不同的试验地点,并且不同的图形符号对应不同年间采集到的数据。 该图是对Bill Cleveland 的“Visualizing Data”一书中的图1.1 做了小幅修改(重新绘制获得了Hobart 出版社的许可)。

更多关于框架图的介绍以及如何利用lattice包绘制框架图的内容见于本书的第4章。

1.1.3 绘图语法

Leland Wilkinson提出的绘图语法提供了另一个完全不同的绘图范式来绘制统计图形。绘制该种范式的图形已被 Hadley Wickham开发的ggplot2 包所实现。

应用此包的一个好处是,它使我们可以通过一个相对较小的基础图形元素集合绘制出大量不同种类的统计图形。此外,ggplot2 包还有一项类似于lattice包的多框架图的名为多面图的特性。

图1.6 展示了一幅用ggplot2绘制的图形示例。更多的关于ggplot2程序包的内容参见本书第5章。


00cc1f6e2f0a5865ddcca285a6dfa42eed7ee06d

图1.6 一幅由ggplot2绘制的图形。该图形反映了高速公路上每英里所耗油量(以加仑为单位)和发动机排量(以升为单位)之间的关系。图中所用到的数据基于发动机中气缸数目的不同被分成了四组,不同的绘图符号对应于不同的分组,并且该图同时展示了对每一组数据分别做线性拟合所得到的结果。

1.1.4 绘制专门的图形

除了提供了各式各样用途广泛的绘制完整图形的函数,R还提供绘制单一图形单元的函数,例如线段、文本、长方形以及多边形。 这为用户定义自己的函数去创建更多专有的图形提供了便利。这里有许多为实现特定目的开发的R扩展包的例子,图1.7 就展示了使用R及R的扩展包 maps、mapdata以及mapproj绘制的新西兰地图。图1.8 展示了另一个例子:使用quantmod包绘制的金融图表。在本书的第4部分会提到许多用于绘制不同图形的程序包及函数。第14章会介绍更多关于R绘制地图的内容。


4f3e98dea2e085379644c329eed90d82c9843c8a

图1.7 一幅使用maps 包、mapdata 包和 mapproj 包绘制的新西兰地图。图中新西兰的地图是通过一系列的多边形组合绘制的,图中还添加了文本和一个箭头,此外还添加了一个数据点来标明奥克兰在地图中的位置,奥克兰同时也是R的诞生地。在图右下方,又额外绘制了一副世界地图,同时用一个圆圈帮助人们定位新西兰在世界地图中的位置。


806e29787d299bba1628fbb280f1a7ffa057e8e6

在某些情况下,研究人员会突发奇想创建一个适用于他们所研究数据的全新类型的图形。

R并非是唯一一个试验新式图形的平台,但是它非常适合研究者将自己的最新绘图技术分享给其他人。图1.9 展示了一个新颖的决策树图,可以把在每一个终端节点上的相关变量的分布可视化(绘制采用了party包)。


cb847bdcb7ce0c13194e9a18de507194196b3978

关于如何应用传统绘图函数从一个空白页生成图形的内容见于第3章。 grid 图形包提供了更加强大而灵活的工具去创建定制图形(见于第6章与第7章),特别是创建供他人使用的绘图函数(见第8章)。

1.1.5 绘图背景综述

除了绘制传统意义上的统计图形,R 绘图功能的通用性和灵活性使得它还能够绘制出更丰富多彩的图像,即使图像所展示出来的信息通常被认为是某些特殊的数据类型。一个很好的典型示例就是R将文本以表格样式组织起来作为图形元素嵌入到图形中的能力,图1.10所示是以标准形式展示了一组元分析的结果。


fee5d45303e49100b220588873e7a888e22c170d

R还可以绘制那些用于帮助以可视化方式演示重要概念和教学要点的图形。图1.11 (由Arden Miller提供)给出了两个例子,这两个例子展示了F-检验的几何表示的扩展。一个更少见的绘图示例是图1.12展示的乐谱图(由Steven Miller 提供)。R 甚至被用来绘制如图1.13所展示的信息图。当然这些例子所展示出来的图形不可能通过调用单一的图形函数来绘制,而是需要读者付出更多的努力才能最终实现。


6d843098b243f961ff142e32ad31760473fbc469

以上这些例子仅仅是R(以及R 的聪明狂热的用户)所拥有的强大绘图能力的小小展示。这些例子凸显出R绘图系统不仅只是用来绘制被认为是只需付出少量努力就可以实现的标准绘图类型,还提供了强大的工具用于绘制包括被认为是通常意义上的统计图形在内的标准绘图类型以外更加广泛的终极图形。

R绘图库网站(R Graphic Gallery web site) 提供了更多种类的绘图示例,感兴趣的读者也可以浏览R 绘图手册网站(R Graphic Manual web site)。 同时,R 维基 (R Wiki) 也有专门章节讲述了R绘图的技巧与窍门,并附带了大量的示例。

相关文章
|
7月前
使用Seaborn库创建图形的使用案例
使用Seaborn库创建图形的使用案例
38 0
|
6月前
|
数据可视化 Python
【100天精通Python】Day62:Python可视化_Matplotlib绘图基础,绘制折线图、散点图、柱状图、直方图和饼图,以及自定义图标外观和功能,示例+代码
【100天精通Python】Day62:Python可视化_Matplotlib绘图基础,绘制折线图、散点图、柱状图、直方图和饼图,以及自定义图标外观和功能,示例+代码
117 0
|
4月前
|
数据可视化 数据挖掘 Linux
seaborn从入门到精通03-绘图功能实现03-分布绘图distributional plots
seaborn从入门到精通03-绘图功能实现03-分布绘图distributional plots
seaborn从入门到精通03-绘图功能实现03-分布绘图distributional plots
|
4月前
|
数据可视化 API 前端开发
seaborn从入门到精通03-绘图功能实现02-分类绘图Categorical plots
seaborn从入门到精通03-绘图功能实现02-分类绘图Categorical plots
seaborn从入门到精通03-绘图功能实现02-分类绘图Categorical plots
|
6月前
|
数据可视化 关系型数据库 Python
【100天精通Python】Day66:Python可视化_Matplotlib 3D绘图,绘制3D曲面图、3D填充图,3D极坐标图,示例+代码
【100天精通Python】Day66:Python可视化_Matplotlib 3D绘图,绘制3D曲面图、3D填充图,3D极坐标图,示例+代码
125 0
|
7月前
|
C# 图形学
C# GDI+绘图(一)GDI+介绍及基础
最近,项目中,有一块比较发杂的网格,并在网格上绘有各种颜色和文本,在Dev库中并未找到能实现这种功能的现有或可以二次开发的控件,因此,涉及到GDI+绘图这块陌生的领域。下面即时我在本次学习过程中的笔记,本次内容一共分为4篇,分别都有各自的代码或工程文件提供,有需要的朋友可以下载。
|
10月前
|
开发框架 数据可视化 .NET
R语言绘图001-基础参数
R语言绘图001-基础参数
118 0
|
11月前
|
人工智能 数据可视化
如何一步步提高图形 B 格?以 ggplot 绘图为例
如何一步步提高图形 B 格?以 ggplot 绘图为例
100 0
python 绘图基础--如何绘制多个的子图 and 封装绘图函数(提高绘图效率)
一般来说,我们研究分析一些海温或者降水等要素的的变化规律时,通常会进行季节特征变化分析,这就需要我们绘制不同季节的空间分布图来进行分析,这就需要我们掌握子图的绘制方法。
python 绘图基础--如何绘制多个的子图 and 封装绘图函数(提高绘图效率)
|
开发者 Python
绘图细节设置2|学习笔记
快速学习绘图细节设置2
95 0
绘图细节设置2|学习笔记