R语言的流行病学应用 课件 第5章 数据可视化_第1页
R语言的流行病学应用 课件 第5章 数据可视化_第2页
R语言的流行病学应用 课件 第5章 数据可视化_第3页
R语言的流行病学应用 课件 第5章 数据可视化_第4页
R语言的流行病学应用 课件 第5章 数据可视化_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章数据可视化5.1背景介绍5.7图形分组和分面5.2

ggplot2程序包5.8主题调整5.3数据及图形属性映射5.9图形输出5.4几何对象5.10练习案例5.5标度和图例5.11小结5.6坐标系统5.1背景介绍5.1背景介绍一图胜千言。数据可视化因其直观、有效的特点,在公共卫生领域需求日益突出——随着电子化数据广泛推行,各级卫生部门及高校课题组积累了大量监测数据与生物样本衍生数据(如血生化指标),对可视化提出了更高要求。数据可视化是借助图形化手段清晰、有效地传递信息的科学技术,其过程应遵循三项准则:准确全面地展示数据本身、以较小空间承载较多信息、揭示数据的规律与关系。R语言拥有三大绘图系统——基本绘图系统(graphics程序包)、Lattice绘图系统(lattice程序包)和ggplot2绘图系统(ggplot2程序包)。其中,ggplot2基于Wilkinson(2005)提出的图形语法,整合了基础与网格系统的优点,通过独立图形部件的组合实现统计图形的自由设计。“没有一幅统计图形是不能用ggplot2画出来的”这句话足以证明其强大。因此,本章将重点介绍ggplot2绘图系统及其衍生程序包。5.2

ggplot2程序包5.2

ggplot2程序包ggplot2程序包并不是R语言自带的程序包,因此若想使用ggplot2程序包中的相关函数,则必需先下载该程序包并将其加载至R语言环境中(演示)。本章将围绕ggplot2程序包的基本语法和重要使用事项逐一展开,从最原始的空白图层开始,不断添加图形要素,进而创建属于自己的图形产品。在使用ggplot2程序包进行图形绘制时,应牢记的核心思路是:将数据映射到带有图形属性几何对象中。需重点注意以下几点:①图层的叠加是通过符号“+”来实现的,可将整个语句写成一行,但建议进行分行,此时“+”需在行末。②通过图层叠加将生成的对象存入R语言环境,并逐步增加图层,进而提高代码的可读性。③若图形属性有重合,则系统会以最后一个图形属性为准,即后者会覆盖前者。5.2

ggplot2程序包本章将重点讲述如下内容:①数据及图形属性映射;②几何对象;③标度和图例;④坐标系统;⑤图形分组和分面;⑥主题调整;⑦图形输出。值得注意的是,尽管ggplot2程序包中的qplot()可按照基础绘图系统中的plot()进行数据可视化,但考虑到绘图思维的连贯性,本章将跳过该内容的介绍,以免受基础绘图系统的影响。更为详细的绘图语法及其他相关内容,可从ggplot2程序包官网或《ggplot2:数据分析与图形艺术》等书籍中查阅获悉。5.3数据及图形属性映射5.3数据及图形属性映射明确数据类型与图形属性映射是实现数据可视化的前提。前者决定采用哪个数据对象进行可视化,后者定义如何将数据中的变量映射到具体的图形属性中。在ggplot2中,通过ggplot()函数定义所选数据(data)和图形属性映射(aes)。数据类型方面,ggplot2可直接处理数据框格式对象(data.frame),其他数据类型可用fortify()先转换成数据框格式。本章大部分图形以diamonds数据集演示,该数据集包含53940颗钻石的价格、质量信息及五个物理指标。通过data("diamonds")可导入,为便于演示,本章随机抽取1000行数据,前6行可通过head(diamonds)查看(演示)。5.3数据及图形属性映射图形的属性映射可通过aes()来实现,该函数中包含多个参数,可分别定义x轴(x)、y轴(y)、颜色(color)、图形(shape)、填充(fill)和分组(group)等,括号中的字符都为函数中参数的名称(演示)。在实际应用中,图形属性映射参数中的color、shape和fill也可直接用字符串变量而非变量名来定义,二者的区别在于是否有双引号——无引号为变量名(按类别映射),有引号为单一字符串值。在使用aes()进行图形属性映射时,该函数内参数所对应的变量名必须包含在默认数据集或该图层数据集中,不然代码运行时会报错,并提示找不到映射变量。需要注意的是,data、x和y这3个参数可通过参数的相对位置来获取参数值,其他参数则必须显式指定。5.3数据及图形属性映射目前ggplot()有三种不同的使用模式:①ggplot(),仅产生空白画布,适用于不同图层使用不同数据集的场景;②ggplot(data),适用于大部分图层都使用同一数据集进行可视化但图形属性映射方式不同的场景;③ggplot(data,mapping=aes(x,y,…)),适用于大部分图层都使用同一数据集进行可视化且图形属性映射方式相同的场景。5.4几何对象5.4几何对象5.4.1概述几何对象是绘图过程中对目标数据进行可视化的对象,如采用线图还是直方图。该对象可在ggplot()产生的图形对象上直接进行添加(采用“+”进行连接)。目前ggplot2程序包中包含了近54个几何对象可供选择,其对应的快捷函数可帮助读者快速定义图层(演示)。每个几何对象都有一组其能识别的图形属性,如散点图(geom_point())需要明确x、y等参数,而矩形图(geom_rect())则需要定义xmin、xmax、ymin和ymax等参数。因此,在使用几何对象绘制图形前,需详细了解该图层属性及其具体用法,特别是必要参数的设置。5.4几何对象5.4.2散点图和折线图接下来,将详细描述如何基于几何对象来进行数据可视化,包括单个几何图层及多个几何图层叠加等。首先,构建单个几何对象(演示)。在实际应用中,为了获得更丰富的统计图形,在基础散点图上可能还需要定义点的颜色、形状和大小等。此时,除了定义数据类型和图形映射方式中的x、y两个参数,也定义了color和shape两个参数,分别对应颜色和形状。值得注意的是,在更复杂的图形场景中,通常需要叠加多个图层(演示)。5.4几何对象5.4.3误差棒和热图在使用geom_errorbar()、geom_crossbar()、geom_pointrange()和geom_linerange()等图层的过程中,都需要额外定义ymin和ymax等参数,分别代表着误差棒的低值和高值。线图层geom_linerange()中存在参数linetype和linewidth分别代表线条的类型和线条宽度;geom_pointrange()中存在参数size,可定义散点的大小;geom_crossbar()和geom_errorbar()中存在参数width,可定义误差箱的大小(演示)。5.4几何对象5.4.3误差棒和热图当处理二维数据时,如展示不同地区不同时间点某个指标的变化特征,可借助geom_tile()图层或geom_raster()图层,通过颜色的变化特征来表示该指标的数值变化特征,这类图形也被称为热图(演示)。需要注意的是,字符串型变量默认按照字符串首字母进行排序,若想重新定义热图排序,则需将字符型变量转换成因子,并定义因子水平,此时会按照因子水平进行排列(更高水平的因子会位于更下端)(演示)。5.5标度和图例5.5标度和图例上一节介绍了如何将变量映射到图形属性(如颜色、大小、形状),但未说明这些属性具体如何取值——例如已指定cut映射到颜色,但不同类别对应的颜色仍未确定——此问题可通过ggplot2程序包的标度解决。在ggplot2绘图系统中,标度的函数格式为“scale_属性名_标度类型”,如scale_y_continuous()用于连续型y轴标度。标度本质上是图层的一部分,可通过“+”添加至主图层(演示)。标度可分为连续型标度和离散型标度,离散型数据进行颜色图形属性映射时,系统默认的标度是scale_colour_hue(),而填充色映射时系统默认的标度是scale_fill_brewer()。其中,形状和线条的图形属性是没有连续型标度的,因此在实际使用过程中遇到连续型数值变量时则会报错。5.5标度和图例所有标度都有以下4个参数:①name,定义坐标轴或图例上的标签,可为字符串或数学表达式;②limits,定义标度范围,对于连续型变量,该参数值可为一个长度为2的数值型向量,而对于离散型变量,该参数值可为一个字符串向量,任何不在标度范围内的数值将被丢弃;③breaks和labels,breaks定义分组,labels则定义标签,若定义了labels,则必须定义breaks;④formatter:在未定义任何标签的情况下,自动格式化标签。5.5标度和图例5.5.1标度接下来重点介绍位置标度和颜色标度。常用的连续型位置标度包括scale_x_continuous()和scale_y_continuous(),分别定义了x轴和y轴的映射模式。其中,参数trans可进行变量转换,如对price取log10,这使图形中的散点更为紧密了(演示)。对于日期或时间格式变量,可通过scale_x_date()或scale_y_date()来定义该位置标度,此时可通过参数date_breaks定义坐标轴刻度,参数date_labels则定义了坐标轴刻度标签,此时可参考使用strptime()的格式要求(演示)。5.5标度和图例5.5.1标度对于颜色标度(包括边界色color和填充色fill)的设置,同样可分为连续型和离散型两类。在连续型颜色标度中,有三类可供选择:①scale_color_gradient()和scale_fill_gradient()(双色渐变型梯度),参数low和high分别定义映射变量最小值和最大值所对应的颜色。②scale_color_gradient2()和scale_fill_gradient2()(三色渐变型梯度),参数low、mid和high分别定义映射变量最小值、中间值和最大值所对应的颜色。③scale_color_gradientn()和scale_fill_gradientn()(n维渐变型梯度),参数colors是一个含有颜色字符的向量,在其他参数默认的情况下,参数colors所对应的颜色向量会依照数据的范围均匀分布,也可用过调整参数values来设置分布类型。在真实应用场景中,双色渐变型和三色渐变型较为常用,这在绘制热图时尤为常见(演示)。5.5标度和图例5.5.1标度离散型颜色标度可通过自动获取或手动定义两种方式设置。ggplot2程序包提供了多种调色板,如默认的scale_color_hue()和scale_color_brewer(),也可使用scale_color_manual()来定义颜色标度。其中,参数values依据变量的因子水平顺序匹配颜色,在实际绘图时,应注意因子水平的顺序,可调整为低水平使用浅色,高水平使用深色,以增强可视化效果(演示)。5.5标度和图例5.5.2图例图例(legend)与标度息息相关。图例一般包含图例名称、图例类型和图例标签3个部件,用于指引数据变量与图形属性的映射。例如,geom_point()用于生成点图例,geom_line()用于生成线图例。当多个图层映射相同变量(如同时映射颜色和形状),ggplot2程序包会自动合并图例,相同图层出现时则会自动覆盖前面的图层。标度函数中存在参数guide,该参数可用guide_legend()进行定制,进而定义图例相关属性(演示)。对多个图层所对应的图例进行合并(演示)。如需在图形中删除图例,可在guides()中将目标图例值设置为none(演示)。5.6坐标系统5.6坐标系统坐标系统是定义两种位置标度(x轴和y轴)的二维系统,目前ggplot2程序包中存在6种坐标系统,坐标系命令规则为:coord_###。常见坐标系如下:①coord_cartesian(),默认的笛卡儿坐标系统。②coord_fixed(),固定“纵横比”的笛卡儿坐标系统。③coord_flip(),翻转x轴和y轴的笛卡儿坐标系统。④coord_trans(),转换后的笛卡尔坐标系统。⑤coord_map()/coord_quickmap(),地图坐标系统。⑥coord_polar(),极坐标系统。以默认的笛卡尔坐标系统为例,说明在ggplot2程序包系统中如何定义坐标系统(演示)。5.6坐标系统在coord_fixed()中的参数ratio,定义了图形收缩比例(y/x)。默认值为1,表示x轴1个单位所对应的长度与y轴1个单位所对应的长度一致(演示)。借助coord_flip(),可生成翻转x轴和y轴后的笛卡尔坐标系统,该坐标系统非常适合x轴标签长度较长的场景(演示)。若想采用转换后的笛卡尔坐标系统,可采用coord_trans(),其中x和y参数为字符型(如x=“log10”)。需注意:坐标系统的转换发生在统计量计算之后,会改变原有图形的几何形状;若采用统计标度(如scale_x_log10),则标度的转换出现在统计量计算前,故不改变原有图形的几何形状(演示)。此外,ggplot2还提供地图坐标系和极坐标系,前者在公共卫生领域应用较多,可与空间流行病学结合;后者可生成饼图、雷达图,但可视化效果不佳,在现代统计图形中不常用。5.7图形分组和分面5.7图形分组和分面5.7.1分组在现实场景中,常常需要处理多变量数据,此时进行数据分组可视化最为恰当,如对于含多个个体的纵向数据,可在aes()中通过映射参数group来实现。本节将通过nlme程序包中的Oxboys数据集进行演示,该数据集包含了不同男孩的成长轨迹数据,主要包含:①Subject(对象,每个男孩唯一标识符的有序因子);②age(年龄,标准年龄的数值向量);③height(身高,男孩身高的数值向量,单位为厘米)。通过定义参数group来展示不同男孩的成长轨迹数据(演示)。aes()中的其他参数包括color、shape和fill,当其对应的映射为分类变量时,ggplot2程序包也会默认对目标数据进行分组展示。以下通过一个包含price、type和tgp的数据框展示箱式图与误差图的绘制(演示)。5.7图形分组和分面5.7.2分面若图形属性较为复杂,那么采用图形分面可以将画布切割成一系列子图,每个子图都代表不同数据子集的可视化结果。ggplot2程序包提供了两种分面类型:封装型(facet_wrap())和网格型(facet_grid()),前者生成以为面板并将其封装成二维,而后者生成二维网格面板,行列可由数据变量定义。选择分面类型后,需要在函数中分别设置分面表达式和位置标度。5.7图形分组和分面5.7.2分面1.封装型(facet_wrap)分面封装型分面适合处理单个多水平变量(如字符型或因子变量)。最简单的分面表达式为“~变量名称”,ggplot2程序包根据因子顺序堆积图形,并通过参数ncol和nrow定义布局。因此,变量顺序或因子水平,以及ncol或nrow是决定分面效果的关键参数(演示)。在某些场景中,尤其是在不同子图中变量值范围差异较大时,可通过参数scales调整图形的位置标度,该参数默认值为“fixed”

:①scales=“fixed”:x轴和y轴标度在所有面板中保持一致;②scales=“free”:x轴和y轴标度在不同面板中会根据子图自由设置;③scales=“free_x”:x轴标度在不同子图中自由设置,y轴标度在所有面板中固定;④scales=“free_y”:y轴标度在不同子图中自由设置,x轴标度在所有面板中固定(演示)。5.7图形分组和分面5.7.2分面2.网格型(facet_grid)分面当通过facet_grid()进行图形分面时,可选择多种模式定义分面表达式,包括一行多列(.~变量名)、一列多行(变量名~.)和多行多列(变量a~变量b)。相比于封装型图形分面,网格型图形分面中不同行和列的子图类型仅由分面表达式决定,没有参数ncol或nrow可用于进一步设置。值得注意的是,facet_grid()和facet_wrap()都可用参数scales来定义位置标度,但在facet_grid()中,参数scales需与分面表达式一致,即在一行多列的分面模式中,通过参数scales只能调整x轴标度,而不能调整y轴标度(演示)。5.7图形分组和分面5.7.2分面2.网格型(facet_grid)分面facet_grid()另一个重要参数则为margins,该参数为逻辑型参数,其值为TRUE或FALSE,若为TRUE,则表示展示边际图,即该行和(或)列所有数据汇总的图形(演示)。在许多情况下,facet_wrap()和facet_grid()可对不同数据子集进行可视化,但当子图使用不同几何对象时,图形合并会变得复杂。此时,cowplot包中的plot_grid()能很好解决该问题:它可将多个ggplot2图形合并为一图,并提供图形对齐方式、标签字体大小、行/列数等自定义选项(演示)。plot_grid()可接收多个ggplot2程序包产生的图形对象,或通过参数plotlist接收一个包含图形对象的列表(演示)。5.7图形分组和分面5.7.2分面2.网格型(facet_grid)分面另外两个需重点注意的参数是rel_widths和rel_heights,用于定义图形合并时各子图所占宽度。如rel_widths=c(2,1)表示横向合并的两个图形中,第一个图形占总宽度的2/3,第二个图形占总宽度的1/3。此时该参数赋值的数值向量长度必须和子图数量一致。若图形纵向排列,则可通过定义参数rel_heights调整子图的相对高度(演示)。此外,若需在大图空隙处插入小图,cowplot程序包可以通过draw_plot()直接进行图形插入(演示)。5.8主题调整5.8主题调整目前系统中存在两种默认的内置主题,包括theme_gray()和theme_bw(),前者使用浅灰色背景和白色网格线,后者则为传统的白色背景和深灰色网格线(演示)。上述主题都有4个参数可供选择:①base_size(字体大小),以pts为单位;②base_family(字体类型),一般选择serif,即TimesNewRoman;③base_line_size(线条大小),涉及线图层、坐标轴、网格线等元素;④base_rect_size(矩形大小),涉及矩形图层、图例等元素。5.8主题调整在ggplot2程序包中,更为复杂的主体设置则需要通过theme(),该函数中包含了几十个参数,可方便用户对坐标轴、图例、图形面板等图形关键要素进行设置。例如,修改参数axis.text,可对坐标轴字体属性进行定义,包含字体大小、字体颜色、字体倾斜度、位置等(演示)。但需要注意的是,参数axis.text只能接受element_text()的返回值,而element_text()中存在多个可定义字体属性的相关参数。这也说明,定义theme()中部分参数值,需要借助元素函数,包括文本(element_text())、线条(element_line())、矩形(element_rect())和空白(element_blank())等,每种元素函数都控制着对应类型的图形要素。5.8主题调整(1)element_text():定义标签和标题的字体属性,包括family、face、color、size、hjust、vjust、angle等。theme()中的参数text用于定义全局标签的字体属性;axis.text、legend.text、strip.text等参数分别用于定义坐标轴、图例和分面中标签的字体属性。另外,theme()中的参数title用于定义全局标题字体属性;axis.title、legend.title、plot.title等参数分别用于定义坐标轴、图例和图形分面中标题的字体属性(演示)。(2)element_line():定义图形中的线条属性,包括color、linewidth、linetype、arrow等。通过theme()中的参数line定义全局线条属性;axis.ticks、axis.line、panel.grid参数分别用于定义坐标轴虚线、坐标轴线及图形网格线的线条属性。由上述参数衍生出的相关参数同样适用,如axis.ticks.x可定义x轴的轴虚线属性,panel.grid.major和panel.grid.minor分别用于定义主网格线和次网格线的线条属性(演示)。5.8主题调整(3)element_rect():定义图形中矩形要素的属性,包括fill、color、linewidth、linetype等。通过theme()中的参数rect可定义全局环境中矩形要素的属性;panel.border、panel.background、legend.background、plot.background等参数分别用于定义面板边界、面板背景、图例背景和整个画布的属性(演示)。(4)element_blank():空图形要素,使用该函数可在图形绘制中删除图形要素,一般采用element_blank()形式。与将属性设为NA(会占用图形空间)不同,element_blank()完全移除该要素且不占用空间(演示)。最后需要注意的是,在实际场景中可能需要同时绘制多幅统计图形,此时可通过theme_set()进行图形主题的全局设置,通过theme()对特定图形的主题进行微调,采用函数theme_update则可对后面图形的主题进行全局性的修改(演示)。5.9图形输出5.9图形输出目前ggplot2程序包产生的图形可通过ggsave()存储在本地,该函数中常用的参数包括:①filename,定义图形存储在计算机时的名字,需要包含后缀名用以明确图形文件类型;②plot,定义ggplot2程序包产生的需要储存的图形名称,默认是last_plot(),即绘图板最后产生的图形;③width用于设置图形宽度,可直接输入具体数值;④height用于设置图形高度,可直接输入具体数值;⑤units,定义图形高度及宽度单位,可定义为in、cm、mm、px等;⑥dpi,定义图形分辨率,学术期刊对图形分辨率都有要求,可设置为300或更高(演示)。一般情况下,会选择将图形保存为PDF或TIFF格式的图形文件,至于width和height的定义需要结合图形中字体大小和图形布局综合考虑。5.10练习案例5.10练习案例1.练习案例一使用R语言自带的数据集mpg绘制箱线图,x轴和y轴映射分别采用manufacturer和cty变量,同时使用不同的填充色来表示不同的model类别。2.练习案例二使用diamonds数据集,根据变量clarity分类展示carat和price两者的关系。同时需要采用白色背景,图形字体为TimesNewRoman,且删除图形中主网格线,将次网格线设置为淡红色(透明度为0.5)。3.练习案例三使用R语言中自带的数据集AirPassengers,以年份为x轴,月份为y轴来绘制热图。同时采用序列型调色板,分别用Heat2和OrRd调色版进行调试。5.11小结5.11小结本章介绍了ggplot2的常用功能,包括数据与图形属性映射、几何对象、标度、坐标轴与图例、图形分面与合并、主题调整等。因篇幅有限,仅列出部分几何对象及常用函数,更详细的参数设置可参考ggplot2官网。需要重点注意的是,在流行病学数据可视化过程中,应灵活定义group、fill、shape、color等参数,确保图形直观且信息饱满,同时通过主题设置进一步美化图形。ggplot2作为R语言中十分受欢迎的绘图系统,衍生出一系列与ggplot2相关程序包,如用于生成漂亮文本标签的ggrepel程序包、生成动画的gganimate程序包、多面板绘制的patchwork程序包等。通过本章学习,希望读者能触类旁通,深刻领悟ggplot2程序包进行图形绘制的核心思想。总而言之,一幅好的统计图形正如一幅好的艺术品,精雕细琢必不可少。5.11小结本章重要函数函数所属程序包作用主要用法ggplotggplot2打开绘图系统gg

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论