版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
R语言数据可视化分析贾俊平2026/1/26基于R语言数据可视化分析本书特色新颖的写作视角严谨的组织结构完备的绘制代码详尽的图形解读贾俊平2026/1/261.1
数据可视化概述1.2R语言的初步使用1.3R语言的数据类型及其操作1.4R语言数据处理第1章数据可视化与R语言
展示数据或数据分析结果探索数据特征和模式从数据中提取信息让别人理解数据或分析结果概要
本章导读图形分类可视化分析比较数值大小和差异展示数据结构和流向展示数据分布展示变量间关系比较样本相似性展示时间序列组合式和交互式图形数据可视化就是把数据用图形展示出来。它既是对数据的展示过程,也是对数据信息的再提取过程可视化分析需要清楚三个主题:数据类型、分析目的、实现工具数据类型决定你可以画出什么图形分析目的决定你需要画出什么图形实现工具决定你能够画出什么图形可视化的三个主题
可视化的三个问题可视化的起源最早可追溯到17世纪,当时就开始对一些物理的基本测量结果手工绘制图表18世纪统计图形得以迅速发展,其奠基人WilliamPlayfair发明了折线图、条形图、饼图等。随着绘制手段的进步,到19世纪,统计图形得到了进一步的发展和完善,产生了直方图、轮廓图等更多的图形,初步形成了统计图表体系进入20世纪50年代,随着计算机技术的发展,逐步形成了计算机图形学,人们利用计算机创建出了首批图形和图表进入21世纪,可视化作为一门性对独立的学科仍处于迅速发展和完善之中,它在生活、生产和科学研究的各个领域已得到广泛应用可视化及其应用——可视化简史1.1数据可视化概述可视化及其应用——什么是可视化数据可视化(datavisualization)是研究数据视觉表现形式的方法和技术,它是综合运用计算机图形学、图像、人机交互等技术将数据映射为可识别的图形、图像、视频或动画,并允许用户对数据进行交互分析从数据分析和应用的角度讲,可视化是将数据用图形表达出来的一种手段,它可以帮助人们更好地理解或解释数据,探索数据的特征和模式,并从数据中提取更多的信息随着AI和数据科学的发展,可视化手段不断进步,数据可视化的概念和内涵也在不断地演进之中,可视化的形式也从传统的统计图表发展成形式多样的可视化技术,应用场景也日趋广泛1.1数据可视化概述可视化及其应用——可视化的应用数据可视化的应用的方式和形式主要取决于使用者的目的有些是用于数据观测和跟踪,比如,实时的股票价格指数变化图,道路交通状况的实时监测等。这类可视化强调实时性和图表的可读性有些是用于数据分析和探索,比如,分析数据分布特征的图表,分析变量间关系的图表等。这类图表主要强调数据的呈现或表达,发现数据之间的潜在关联有些是为帮助普通用户或商业用户快速理解数据的含义或变化,比如,商业类图表。还有些则是用于教育或宣传,比如出现在街头、杂志上的图表。这类图表强调说服力,通常使用强烈的对比、置换等手段,绘制出具有冲击力的图像1.1数据可视化概述可视化的数据类型可视化面对的数据单纯类很少单纯值较少混合型经常变量分类类别变量(定性)无序类别变量(名义值)有序类别变量(顺序值)布尔变量(二值)数值变量(定量)离散变量(离散值)连续变量(连续值)时间变量(定性或定量)定性:离散值定量:连续值1.1数据可视化概述可视化的数据类型类别数据(categoricaldata)类别数据也称分类数据或定性数据(qualitativevariable)它是类别变量(categoricalvariable)的观测结果根据取值是否有序可分为无序类别变量和有序类别变量无序类别变量的各类别间是不可以排序的,而有序类别变量的各类别间则是有序的数值数据(metricdata)也称定量数据(quantitativedata),它是数值变量(metricvariable)的观测结果根据其取值的不同可以分为离散变量(discretevariable)和连续变量(continuousvariable)离散变量是只能取有限值的变量,连续变量是可以在一个或多个区间中取任何值的变量1.1数据可视化概述可视化的实现工具为什么用R?使用不同软件能够画出的图形是不同的,即使是同一种图形,不同软件有可能有不同的图形式样R是一种免费的统计计算和绘图语言,也是一套开源的数据分析解决方案。R不仅提供了内容丰富的数据分析方法,也具有功能强大的可视化功能R具有多样性和灵活性的特点,使用者可根据需要选择图形并进行修改R提供了大量的绘图包和函数,几乎所有图形均可以使用R函数来绘制,每个函数都有详细帮助信息如果对图形有特殊要求,使用者还可以自己编写程序绘制想要的图形Excel—表处理软件—提供基本的分析图形SPSS—统计分析软件—提供基本分析图形R—专业的数据分析和可视化软件—可视功能强大,提供大量的图形Python—编程语言,可视化功能不如R其他专业绘图软件,如tableau1.1数据可视化概述图形的基本分类可视化分析中使用的图形种类繁多,因可视化的目标不同,要对图形做出确切的分类十分困难相同的数据可绘制不同的图形,相同的图形可以适用于不同的数据或分析目的同一类图形有很多变种形式,绘制方式不同,称谓也不相同。因此,同一图形也可以归属于不同的类别本书根据可视化目标(分析目的)将图形大致分为以下几类(仅供参考)1.1数据可视化概述图形的基本分类1.1数据可视化概述比较数值差异或大小的图形适用的数据主要是各类别对应的频数向量或其他数值向量,其数值可以是绝对值,也可以是比例或百分比等涉及的变量可以是一个或多个。其可视化图形可以大致分成4类条形或矩形表示数值大小,如条形图、马赛克图等用圆或点表示数值大小,如圆堆图、气泡图等用颜色饱和度表示数值大小,如热图用点或点与坐标轴的连线、点与点的连线等表示各类别对应的数值差异,如克利夫兰点图、棒棒糖图和哑铃图等图形的基本分类1.1数据可视化概述比较数值大小和差异的图形图形的基本分类1.1数据可视化概述展示数据结构和流向的图形展示数据构成和流向的图形适用的数据与比较数值差异或大小的图形相同数据结构或构成是指类别的部分与整体的关系,通常用部分类别的数值占全部数值的比例或百分比表示对于只涉及一个类别变量的单层结构,其可视化图形主要有饼图、扇形图、环形图、弧形图等对于涉及两个或两个以上类别变量的多层结构。其可视化图形主要有饼环图、旭日图、沃罗诺伊图等数据流向是指数据在不同类别之间的流动方向及流量大小,其可视化图形主要有桑基图、和弦图等图形的基本分类1.1数据可视化概述展示数据结构和流向的图形图形的基本分类1.1数据可视化概述展示数据分布的图形数据分布主要是指数值数据分布的形状、点的分布位置和范围等特征其可视化图形可以分为3类展示数据分布形状的图形,如直方图、核密度图、箱线图、小提琴图等展示数据在数轴上分布位置的图形,如带状图、威尔金森点图及其变种展示数据分布范围和分布特性的图形,如极差图、Q-Q图等图形的基本分类1.1数据可视化概述展示数据分布的图形图形的基本分类1.1数据可视化概述展示变量间关系的图形展示变量间关系使用的图形取决于所分析的变量类型。对于数值变量之间关系,可以用散点图来展示它们之间的关系如果只涉及两个数值变量,且观测值不是很多时,可以用普通散点图进行展示当观测值较多时,图形中的点会出现重叠而难以识别,此时可以绘制分箱散点图或密度散点图等进行展示如果仅分析3个变量之间的关系,则可以绘制3D散点图或气泡图如果分析多个变量之间的关系,则可以用散点图矩阵、相关系数矩阵、相关系数热图等进行展示图形的基本分类1.1数据可视化概述展示变量间关系的图形图形的基本分类1.1数据可视化概述比较样本相似性的图形如果有多个样本的多个观测变量,要比较各样本的相似性或差异,其可视化图形可以大致分为比较整体相似性的图形,如平行坐标图、雷达图等;比较样本间差异的图形,如星图、脸谱图等;对样本进行确切分类的图形,如聚类图、聚类热图等。图1-5列出了比较样本相似性的基本图形图形的基本分类1.1数据可视化概述展示时间序列的图形探索时间序列变化模式和特征的基本图形是折线图或面积图当有多个变量时,可以绘制流线图、地平线图等要展示一个时间序列中各相邻观测值的变化方向,可以绘制瀑布图要展示多个样本在不同时间上的变化趋势,可以绘制斜线图要比较多个样本在不同时间点上的排名变化,可以绘制凹凸图如果数据是按一年中的每天记录的,则可以绘制日历图展示每天的数据变化特征如果要寻找序列的变化趋势,可以绘制平滑曲线、成分分解图等图形的基本分类1.1数据可视化概述展示时间序列的图形
R和Rstudio的下载与安装
Rstudio的下载在安装完R后,可以进入RStudio的官方网站(/products/rstudio/download/)下载RStudio。点击Free下的Download,根据自己的计算机系统选择适合的版本下载并安装完成后,双击即可启动RStudio进入开始界面1.2R语言的初步使用对象赋值与运行对象赋值将多个数据组合成一个数据集,并给数据集起一个名称,然后把数据集赋值给这个名称,这就是所谓的R对象(object)。R对象可以是一个数据集、模型、图形等任何东西R语言的标准赋值符号是“<-”,也允许使用“=”进行赋值,但推荐使用更加标准的前者#将5个数据赋值给对象xx<-c(80,87,98,73,100)#将数据框data1_1赋值给对象yy<-data1_11.2R语言的初步使用编写代码脚本R代码虽然可以在提示符后输入,但如果输入的代码较多,难免出现输入错误如果代码输入错误或书写格式错误,运行后R会出现错误提示或警告信息。这时,在R中修改错误的代码就比较麻烦,也不利于代码的保存R代码最好是在脚本文件中编写,书写完成后,选中输入的代码,并点击鼠标右键,选择“运行当前行或所选代码”,即可在R中运行该代码并得到相应结果1.2R语言的初步使用包的安装与加载#查看R帮助help(sum)#查看mean函数的帮助信息help(package="stats")#查看包stats的信息var#查看var函数源代码#安装包install.packages("ggplot2")#安装包ggplot2install.packages(c("ggplot2","vcd"))#同时安装两个包#加载包library(ggplot2)#加载包ggplot2require(ggplot2)#加载包ggplot2有些R包发布在GitHub上,如果想下载GitHub上的包,需要先安装devtools包,然后运行devtools::install_github("库名/包名")来安装(GitHub网址:/)。如果不知道库名,可以使用githubinstall包,该包专门负责从GitHub安装R包,只需要提供R包名称,无需库名。比如想安装ggTimeSeries包,先安装并加载githubinstall包,然后运行githubinstall("ggTimeSeries")即可完成安装。有少数R包对R的版本具有依赖性,在更新或安装最新的R版本时,建议保留使用过的R版本1.2R语言的初步使用包的安装与加载本书使用的R包,建议在使用本书前先安装好所需的包1.2R语言的初步使用aplotggchartsggmultiggthemesrayshaderaplpackggChernoffggpatternggTimeSeriesRColorBrewercirclizeggcirclepackggpieggtricksrempsycComplexHeatmapggcirclizeggpirateggwordcloudreshape2corhexggcorrplotggplot2gridExtrascalesDescToolsggcorrplot2ggpmiscGWalkRscatterpiedevtoolsggdistggpointdensityIDPmiscscatterplot3ddplyrggESDAggpolintrodataviztidyre1071ggExtraggpubrlattiecExtratidytextEnvStatsggfittextggrepellubridatetidyverseexportggforceggridgesnetworkD3treemapifyfactoextraggformulaggroundopenairvcdforecastggh4xggscipatchworkviridisgeomtextpathgghalvesggsideplotlywaterfallsggalluvialgghighlightggsignifplotrixwebrGGallyggHoriPlotggstatsplyrWeightedTreemapsggaltggiraphExtraggstatsplotpngwordcloud2ggbeeswarmggmagnifyggstreampsych
ggbraceggmosaicggstudentqqplotr
R的数据类型在R中分析数据或创建一个图形时,首先要有分析或绘图的数据集(dataset)R处理的数据集类型包括向量(vector)、矩阵(matrix)、数组(array)、数据框(dataframe)、因子(factor)、列表(list)等1.3R语言的数据类型及其操作向量向量——是个一维数组,其中可以是数值型数据,也可以是字符数据或逻辑值(如TRUE或FALSE)要在R中录入一个向量,需要使用c函数,将不同元素组合成向量#录入向量a<-c(2,5,8,3,9)#数值型向量b<-c("甲","乙","丙","丁")#字符型向量c<-c("TRUE","FALSE","FALSE","TRUE")#逻辑值向量a;b;c#运行向量a,b,c#访问向量中的元素a[c(2,5)]1.3R语言的数据类型及其操作矩阵矩阵——二维数组,其中的每个元素都是相同的数据类型用matrix函数可以创建矩阵#用matrix函数创建矩阵a<-1:6#生成1到6的数值向量mat<-matrix(a,#创建向量a的矩阵
nrow=2,ncol=3,#矩阵行数为2,列数为3byrow=TRUE)#按行填充矩阵的元素mat#显示矩阵mat#给矩阵添加行名和列名rownames(mat)=c("甲","乙")#添加行名colnames(mat)=c("A","B","C")#添加行名#用t函数对矩阵转置t(mat)#矩阵转置1.3R语言的数据类型及其操作数组数组——与矩阵类似,但维数可以大于2使用array函数可以创建数组#创建数组dim1<-c("男","女")#指定第1个维度为2个元素dim2<-c("赞成","中立","反对")#指定第2个维度为3个元素dim3<-c("东部","西部","南部","北部")#指定第3个维度为4个元素data<-round(runif(24,50,100))#生成24个均匀分布的随机数,并取整d<-array(data,c(2,3,4),dimnames=list(dim1,dim2,dim3))#创建数组并赋值给对象d1.3R语言的数据类型及其操作数据框——创建数据框数据框——一种表格结构的数据,类似于Excel中的数据表。使用data.frame函数可创建数据框使用data.frame函数可创建数据框#写入姓名和分数向量names<-c("刘文涛","王宇翔","田思雨","徐丽娜","丁文斌")#写入学生姓名向量stat<-c(68,85,74,88,63)#写入各门课程分数向量math<-c(85,91,74,100,82)econ<-c(84,63,61,49,89)#将向量组织成数据框形式table1_1<-data.frame(学生姓名=names,统计学=stat,数学=math,经济学=econ)
#将数据组织成数据框形式,并储存在对象table1_1中table1_1#显示table1_1中的数据1.3R语言的数据类型及其操作数据框——数据框的查看和访问数据框的查看只显示数据框的前几行或后几行。使用head(table1_1)默认显示数据的前6行,如果只想显示前3行,则可以写成head(table1_1,3)。使用tail(table1_1)默认显示数据的后6行,如果想显示后3行,则可以写成tail(table1_1,3)使用class函数可以查看数据的类型使用nrow函数和ncol函数可以查看数据框的行数和列数使用dim函数可以同时查看数据框的行数和列数当数据量比较大时,可以使用str函数查看数据的结构1.3R语言的数据类型及其操作数据框——数据框的查看和访问数据框的访问对数据框中的特定变量进行分析或绘图,用“$”符号指定要分析的变量也可以用下标指定变量所在的列或行(这样可以避免书写变量名)要分析指定的列时,需要将逗号放在数字的前面,要分析指定的行时,需要将逗号放在数字的后面1.3R语言的数据类型及其操作数据框——数据框的合并使用rbind函数可以将不同的数据框按行合并使用cbind函数可以将不同的数据框按列合并#数据框合并table1_1<-read.csv("C:/mydata/chap01/table1_1.csv")table1_2<-read.csv("C:/mydata/chap01/table1_2.csv")#按行合并数据框mytable<-rbind(table1_1,table1_2)1.3R语言的数据类型及其操作数据框——排序有时需要对向量或数据框进行排序。使用sort函数可以对向量排序,函数默认decreasing=FALSE(默认的参数设置可以省略不写),即升序排序,降序时,可设置参数decreasing=TRUE如果要对整个数据框中的数据进行排序,排序结果与数据框中的行变量对应,则可以使用base包中的order函数和sort_by函数、dplyr包中的arrange函数等排序函数arrange可以根据数据框中的某个列变量对整个数据框排序。函数默认按升序排序,降序时,设置参数desc(变量名)即可#使用sort_by函数根据某个列变量对整个数据框排序table1_1<-read.csv("C:/mydata/chap01/table1_1.csv")sort_by(table1_1,table1_1$姓名)#按姓名升序对整个数据框排序
#使用dplyr包中的arrange函数根据某个列变量对整个数据框排序library(dplyr)#加载包table1_1<-read.csv("C:/mydata/chap01/table1_1.csv")arrange(table1_1,desc(数学))#按数学分数降序对整个数据框排序1.3R语言的数据类型及其操作数据框——修改和汇总dplyr应用dplyr提供了多个数据处理函数,并提供了管道操作符“%>%”可以连续操作数据select函数可选择列变量mutate可以创建一个新列、修改列summarise_all函数可以对多个数值列进行汇总并返回一个新数据框summarise_if函数可以对满足条件的列进行汇总并返回一个新数据框summarise函数结合group_by函数可以创建带有分组汇总结果的新数据框1.3R语言的数据类型及其操作因子和列表因子——类别变量在R中称为因子(factor),因子的取值称为水平(level)。很多分析或绘图都可以按照因子的水平进行分类处理使用factor函数可以将向量编码为因子#创建因子v<-c("金融","地产","医药","医药","金融","医药")#创建向量af1<-factor(a);f1#将向量a编码为因子#将因子转换为数值as.numeric(f1)#将无序因子转换为有序因子或数值b<-c("很好","好","一般","差","很差")#创建向量bf2<-factor(b,ordered=TRUE,levels=c("很好","好","一般","差","很差"))as.numeric(f2)#将因子转换为数值1.3R语言的数据类型及其操作数据读取和保存#读取编码格式为GBK的csv文件(含有标题)
table1_1<-read.csv("C:/mydata/chap01/table1_1.csv",fileEncoding="GBK")#读取编码格式为UTF-8的csv文件(未运行)
read.csv("C:/mydata/chap01/table1_1.csv",fileEncoding="UTF-8")read.csv("C:/mydata/chap01/table1_1.csv")#数据编码格式为UTF-8的csv文件#存为编码格式为GBK的csv文件
write.csv(table1_1,file="C:/mydata/chap01/table1_1.csv",fileEncoding="GBK")
#存为编码格式为GBK的csv文件
#存为编码格式为UTF-8的csv文件
write.csv(table1_1,file="C:/mydata/chap01/table1_1.csv)#默认编码格式为UTF-8write.csv(table1_1,file="C:/mydata/chap01/table1_1.csv",fileEncoding="UTF-8")
#指定编码格式为UTF-8#注:file=""指定文件的存放路径和名称。存为UTF-8的csv文件,在用Excel打开时可能会显示乱码,建议存为GBK编码格式。1.3R语言的数据类型及其操作数据抽样使用sample函数可以从一个已知的数据集中抽取简单随机样本函数默认replace=FALSE,即采取无放回抽样方式抽取样本,设置参数replace=FALS则采取有放回抽样方式抽取样本,该函数也可以抽出符合特定条件的数据性别专业在读学位网购金额女会计学学士382女金融学硕士171男会计学博士579男管理学学士211女会计学学士654……………………男管理学博士396女金融学博士398女金融学学士360女管理学硕士575男金融学硕士717#随机抽取5个不同的专业组成一个样本df<-read.csv("C:/mydata/chap01/data1_1.csv")n1<-sample(df$专业,size=5);n1#无放回抽取5个不同专业n2<-sample(df$专业,size=5,replace=TRUE);n2#有放回抽取5个不同专业10个网购金额组成一个样本n3<-sample(df$网购金额,size=10);n3#无放回抽取10个网购金额n4<-sample(df$网购金额,size=10,replace=TRUE);n4#有放回抽取10个网购金额1.4R语言数据处理数据筛选根据需要找出符合特定条件的某类数据使用R的dplyr包中的filter函数、基础包base包中的subset函数等均可以返回满足条件的向量、矩阵或数据集的子集。使用sample函数和which函数、下标[]方法也可以很容易进行数据筛选#使用dplyr包中的filter函数筛选出符合特定条件的数据library(dplyr)df<-read.csv("C:/mydata/chap01/data1_1.csv")filter(df,网购金额>=800)#筛选网购金额大于等于800的所有学生filter(df,性别=="男"&网购金额>=700&网购金额<=800)#筛选出网购金额在700~800之间的男生filter(df,性别=="男"&专业=="金融学"&在读学位=="博士")#筛选出金融学专业的男博士#使用subset函数筛选出符合特定条件的数据subset(df,性别=="女"&专业=="会计学"&网购金额>=700)#筛选出会计学专业网购金额大于等于700的女生subset(df,网购金额>600&专业=="管理学"&性别=="男")#筛选出网购金额大于600管理学专业的男生1.4R语言数据处理生成随机数用R软件产生随机数十分简单,只需在相应分布函数的前面加上字母r即可。由于是随机生成,每次运行会得到不同的随机数。要想每次运行都产生相同的一组随机数,可在生成随机数之前使用函数set.seed()设定随机数种子。使用相同的随机数种子,每次运行都会产生一组相同的随机数#生成不同分布的随机数rnorm(n=5,mean=0,sd=1)#产生5个标准正态分布随机数set.seed(15)#设置随机数种子rnorm(n=5,mean=50,sd=5)#产生5个均值为50、标准差为5的正态分布随机数runif(n=5,min=0,max=10)#在0到10之间产生5个均匀分布随机数rchisq(n=5,df=10)#产生5个自由度为10的卡方分布随机数1.4R语言数据处理数据类型的转换变量转换成向量将一种数据结构转换为另一种数据结构将数据框中的某个变量转换为一个向量,也可以将几个变量合并转换成一个向量(注意:数据合并必须有意义)使用as.vector函数可以将变量转换成向量#将统计学分数转化成向量v1<-as.vector(table1_1$统计学);v1#统计学分数和数学分数合并转换为向量v2<-as.vector(c(table1_1$统计学,table1_1$数学));v2#将数据框转换为向量v3<-as.vector(as.matrix(table1_1[,2:4]));v31.4R语言数据处理数据类型的转换数据框转换成矩阵使用as.matrix函数可以将数据框转化成矩阵,使用as.data.frame可以将矩阵转化成数据框#将数据框table1_1转换为矩阵matmat<-as.matrix(table1_1[,2:4])#将table1_1中的2~4列换为矩阵matrownames(mat)=table1_1[,1]#命名矩阵的行名为table1_1第1列的名称mat#显示矩阵#将矩阵mat转换成数据框,并添加上列(变量)名称library(tidyverse)df<-as.data.frame(mat)%>%#将矩阵转换成数据框df
rownames_to_column("姓名")#加上列名称(姓名)1.4R语言数据处理数据类型的转换短格式转化成长格式数据框table1_1中的每一门课程占据一列,这种数据形式属于短格式或称宽格式使用R做数据分析或绘图时,有时需要将“课程”和“分数”分别放在单独的列中,这种格式的数据就是长格式将短格式数据转化成长格式数据,可以使用reshape2包中的melt函数、tidyr包中的gather函数等。使用前需要安装并加载reshape2包或tidyr包#使用reshape2包中的melt函数融合数据df1<-melt(table1_1,id.vars="姓名",="课程",="分数")
#设置id变量,变量名和值名#使用tidyr包中的gather函数融合数据library(tidyr)#加载tidyr包df2<-gather(table1_1,key="课程",value="分数","统计学","数学","经济学")#key为融合后的变量名称#使用tidyr包中的pread函数将长格式转换成短格式##dd<-spread(df2,key="课程",value=分数)1.4R语言数据处理数据类型的转换将数据框转换成HTML表格当数据框中的样本(行)和变量(列)都较多时,为了向别人展示数据框,可以将其转换成HTML(HyperTextMarkupLanguage,超文本标记语言)形式的表格R中有多个包可以生成HTML表格,如flextable包、reactable包、DT包、gt包、kableExtra包、huxtable包、rhandsontable包、pixiedust包等。它们不仅可以生成原始数据的HTML表格,还可以生成数据分析结果的表格,并可以根据需要将表格存为Word、ppt、image等不同格式的文档。这里仅介绍rempsyc包提供的nice_table函数将数据框或数据分析的结果转换flextable表格对象的方法library(rempsyc)library(dplyr)table1_1<-read.csv("C:/mydata/chap01/table1_1.csv")df<-table1_1%>%mutate(平均分数=(统计学+数学+经济学)/3)#添加平均分数一列tab<-nice_table(df,width=0.3)#生成HTML表格,列宽为0.5tab1.4R语言数据处理生成频数分布表——类别数据——一维列联表频数分布表(frequencydistributiontable)是对类别数据(因子的水平)计数或数值数据类别化(分组)后计数生成的表格由于类别数据本身就是一种分类,只要将所有的类别都列出来,然后计算出每一类别的频数,即可生成一张频数分布表根据观测变量的多少,可以生成一维列联表、二维列联表和多维列联表一维列联表——当只涉及一个类别变量时,这个变量的各类别可以放在频数分布表中“行”的位置,也可以放在“列”的位置,将该变量的各类别及其相应的频数列出来就是简单频数表,也称一维列联表(one-dimensionalcontingencytable)或简称一维表#生成在读学位的一维频数表tab1<-table(data1_1$在读学位);tab1#生成频数表prop.table(tab1)*100#将频数表转化成百分比表1.4R语言数据处理生成频数分布表——类别数据——二维列联表当涉及两个类别变量时,可以将一个变量的各类别放在“行”的位置,另一个变量的各类别放在“列”的位置(行和列可以互换),由两个类别变量交叉分类形成的频数分布表称为二维列联表(two-dimensionalcontingencytable),简称二维表或交叉表(crosstable)#生成性别与专业的二维列联表data1_1<-read.csv("C:/mydata/chap01/data1_1.csv")attach(data1_1)#绑定数据框data1_1tab2<-table(性别,专业);tab2#生成性别和专业的二维列联表addmargins(tab2)#为列联表添加边际和addmargins(prop.table(tab2)*100)#将列联表转换成百分比表1.4R语言数据处理生成频数分布表——类别数据——多维列联表当有两个以上类别变量时,通常将一个或多个变量按“列”摆放,其余变量则按“行”摆放由多个类别变量生成的频数分布表称为多维列联表(multidimensionalcontingencytable),简称多维表或高维表(higher-dimensionaltables)#使用ftable函数生成例1-2的多维列联表data1_1<-read.csv("C:/mydata/chap01/data1_1.csv")tab3<-ftable(data1_1,row.vars=c("性别","专业"),col.vars="在读学位")
#行变量为性别和专业,列变量为在读学位#为列联表添加边际和ftable(addmargins(table(data1_1$性别,data1_1$专业,data1_1$在读学位)))#使用vcd包中的structable函数生成例1-2的多维列联表library(vcd)data1_1<-read.csv("C:/mydata/chap01/data1_1.csv")structable(性别+专业~在读学位,data=data1_1)#不同表达式产生不同形式的多维表1.4R语言数据处理生成频数分布表——将列联表转换成数据框如果得到的数据本身就是列联表形式,为满足自身的分析需要,也可以将列联表转换成数据框形式使用DescTools包中的Untable函数可以将列联表转化成原始数据框,使用as.data.frame函数可以将列联表转化成带有类别频数的数据框#将列联表转化成原始数据框mytable<-ftable(data1_1[,1:3])#选择变量1~3生成多维列联表df<-Untable(mytable)#将列联表转化成原始数据框#将列联表转化成带有交叉类别频数的数据框tab<-ftable(data1_1[1:3])#生成列联表(也可以使用table函数生成列联表)df<-as.data.frame(tab);df#将列联表转化成带有类别频数的数据框1.4R语言数据处理生成频数分布表——数值数据类别化(分组)当有两个以上类别变量时,通常生成数值数据的频数分布表时,需要先将其类别化,即转化为类别(因子)数据,然后再生成频数分布表类别化的方法是将原始数据分成不同的组别,比如,将一个班学生的考试分数分成60以下,60~70,70~80,80~90,90~100几个区间,通过分组将数值数据转化成有序类别数据类别化后再计算出各组别的数据频数,即可生成频数分布表1.4R语言数据处理生成频数分布表——数值数据类别化(分组)
1.4R语言数据处理生成频数分布表——数值数据类别化(分组)使用base包中的cut函数、actuar包中的grouped.data函数、DescTools包中的Freq函数等均可实现数据分组并生成频数分布表这里推荐使用DescTools包中的Freq函数#使用Freq函数的默认分组(含上限值)data1_1<-read.csv("C:/mydata/chap01/data1_1.csv")tab1<-Freq(data1_1$网购金额)#指定组距=150(不含上限值)tab2<-Freq(data1_1$网购金额,breaks=c(0,150,300,450,600,750,900),right=FALSE)tab2<-data.frame(分组=tab2$level,频数=tab2$freq,频数百分比=tab2$perc*100,+累积频数=tab2$cumfreq,累积百分比=tab2$cumperc*100)print(tab2,digits=4)print函数打印并确定小数位数1.4R语言数据处理充分了解变量或数据的类型在可视化中十分重要,它决定了你所面对的数据集可以画出什么图形明确分析目的,它决定了你需要画出什么图形要能够对数据集进行熟练的操作,比如,如何处理向量、矩阵、数据框、因子和列表等,并熟练使用数据类型的转换方法和生成频数分布表的方法本章小结
本章小结可视化分析比较数值大小和差异展示数据结构和流向展示数据分布展示变量间关系比较样本相似性展示时间序列组合式和交互式图形THEENDTHANKSTHEENDTHANKS2026/1/26R语言数据可视化分析贾俊平2026/1/26基于R语言数据可视化分析贾俊平2026/1/26本书特色新颖的写作视角严谨的组织结构完备的绘制代码详尽的图形解读贾俊平2026/1/262.1graphics简介基本绘图函数图形参数图形颜色页面布局打开多个窗口第2章R语言绘图基础
2.2ggplot2简介绘图语法图形外观图形注释图形分面图形组合概要R的绘图系统主要有3个一是基础安装时自带的graphics绘图系统或称graphics包,该系统提供了多个绘图函数,可以绘制常用的一些图形,用于快速的数据探索二是lattice系统或称lattice包,该系统提供了绘制网格图形的高级函数三是ggplot2系统或称ggplot2包,该系统使用独特的绘图语法,可绘制多种二维图形(ggplot2包使用前需要先下载并安装后才能使用)
本章导读graphics包也称为基础绘图统或传统绘图系统,该包提供了大量的基本绘图函数,可用于快速探索数据最初安装R软件时,该包就已经安装在R中,其中的绘图函数可以直接使用graphics包中的绘图函数可分为两大类:一类是高级绘图函数,这类函数可以产生一幅独立的图形;另一类是低级绘图函数,这类函数不产生独立的图形,而是在高级函数绘制的图形上添加一些图形元素,如图例、注释文本、线段、数学表达式等
graphics系统(包)2.1graphics简介基本绘图函数—高级绘图函数—plot【例2-1】
30名学生选修R语言和Python语言课程的分数性别专业R语言Python语言男金融9376女管理9073男金融7263……………………男金融8371男金融8675女管理83712.1graphics简介基本绘图函数——其他高级绘图函数函数数据类型图形assocplot二维列联表关联图barplot数值向量;矩阵;列联表条形图boxplot数值向量;列表;数据框箱线图cdplot单一数值向量;一个对象条件密度图contour数值,数值,数值等高线图coplot表达式条件图curve表达式曲线dotchart数值向量;矩阵点图fourfoldplot2×2表四折图函数数据类型图形hist数值向量直方图image数值,数值,数值色阵图matplot数值向量;矩阵矩阵列图mosaicplot二维列联表,N维列联表马赛克图pairs矩阵;数据框散点图矩阵persp数值,数值,数值三维透视图pie非负的数值向量;列联表饼图stars矩阵;数据框星图stem数值向量茎叶图stripchart数值向量;数值向量列表带状图sunflowerplot数值向量,因子太阳花图symbols数值,数值,数值符号图2.1graphics简介基本绘图函数——低级绘图函数函数描述abline为图形添加截距为a、斜率为b的直线。arrows在坐标点(x0,y0)和(x1,y1)之间绘制线段,并在端点处添加箭头。box绘制图形的边框。layout布局图形页面。legend在坐标点(x,y)处添加图例。lines在坐标点(x,y)之间添加直线。mtext在图形区域的边距或区域的外部边距添加文本。points在坐标点(x,y)处添加点。polygon沿着坐标点(x,y)绘制多边形。polypath绘制由一个或多个连接坐标点的路径组成的多边形。rasterlmaga绘制一个或多个网格图像。rect绘制一个左下角在(xleft,ybottom)处、右上角在(xright,ytop)处的矩形。rug添加地毯图。segments在坐标点(x0,y0)和(x1,y1)之间绘制线段。text在坐标点(x,y)处添加文本。title为图形添加标题。xspline根据控制点(x,y)绘制x样条曲线(平滑曲线)。低级绘图函数不以产生独立的图形主要为现有的图形添加新的元素,如添加线段、标题、图例、注释文本、多边形、坐标轴等2.1graphics简介基本绘图函数——plot与低级函数的结合使用plot函数与低级绘图函数的结合应用2.1graphics简介图形参数graphics包中的每个绘图函数都有多个参数,图形的输出是由这些参数控制的绘图时,若不对参数做任何修改,则函数使用默认参数绘制图形。如果默认设置不能满足需要,可对其进行修改,以改善图形输出绘制图形时可根据需要调整参数,根据图形变化决定参数是否要修改以及如何修改。不同函数具有不同的参数及参数设置,这样的参数属于函数的特定参数有些参数在不同函数中都可以使用,这样的参数属于绘图函数的标准参数有的标准参数在不同函数中的作用是不同的,比如,col参数在有些函数中用于设置点、符号等的颜色,但在条形图、直方图、箱线图等函数中,col参数用来填充条、箱子的颜色,使用时需要注意。除绘图函数本身的参数外,graphics包中绘制函数的参数也可以使用par函数来控制。使用help(par)可以查阅详细信息2.1graphics简介图形参数par函数的常用参数及其对应的数字2.1graphics简介图形颜色使用colors()函数可以查看R全部657种颜色的名称列表使用graphics包绘图时,设置绘图颜色的参数主要有3个:col、bg和fg。col主要用于设置绘图区域中绘制的数据符号、线条、文本等元素的颜色;bg用于设置图形的前景颜色,如坐标轴、图形的边框等;fg用于设置图形的背景颜色,如图形区域的颜色等除以上名称外,要使用多种颜色绘图时,也可以使用grDevices包提供的调色板函数,如rainbow、heat.colors、col=colors、terrain.colors、topo.colors、cm.colors、gray.colors等。绘图时可以将颜色设置为这些函数,如col=colors(256)、col=rainbow(n,start=0.4,end=0.5)、col=heat.colors()等使用RColorBrewer包中的display.brewer.all函数可以查看R的调色板,其中包括连续型部分(单色系)、离散型部分(多色系)和极端值部分(双色系)2.1graphics简介图形颜色——调色板——例题分析使用RColorBrewer包中的display.brewer.all函数可以查看R的调色板,也可以只展示其中的连续型部分、离散型部分或极端值部分16进制颜色代码不同调色板绘制的条形图2.1graphics简介页面布局——par函数和layout函数析
2.1graphics简介打开多个绘图窗口用dev.new()函数打开一个新的绘图窗口;用函数dev.off()关闭新的绘图窗口2.1graphics简介绘图语法ggplot2包是由HadleyWickham(2009)编写的绘图包该包提供了一种基于语法的图形绘制系统,因其图形漂亮、语法规范受到人们广泛喜爱用ggplot2包绘图十分方便,尤其适合绘制二维图形与传统绘图包graphics相比,不需要太多的细节设置就可以绘制出满意的图形基于ggplot2开发的绘图包也有很多,如ggiraphExtra、ggpubr、tidyplots等,其中的函数兼容ggplot2的语法,而参数设置相对较少,方便快速绘图2.2ggplot2简介绘图语法【例2-1】2.2ggplot2简介绘图语法ggplot2的绘图过程类似于创作一幅油画的过程:先准备画布、颜料等原材料,然后构思画面,再一层一层绘制ggplot2绘图使用图层(layer)概念,各图层之间用“+”连接,后面的图层叠加在前面的图层之上。图层包括数据(data)、映射(mapping)、几何对象(geom_xx)、统计变换(stat_xx)、标度(scale)、坐标系(coord)、分面(facet)、主题(theme)等图层可分为数据绘图和细节美化两大部分。绘图代码的基本结构大致如下2.2ggplot2简介#ggplot2绘图代码的基本结构ggplot(data,
aes())
+#基础图层,不生成图形元素(必需)
geom_xxx()
+
#几何图层,生成图形元素(必需)
scale_xxx()
+
#标度调整,如颜色、坐标轴等(可选)
coord_xxx()
+
#坐标变换,默认为笛卡儿坐标系(可选)
facet_xxx()
+
#图形分面,按因子或变量绘制面板图形(可选)
theme_xxx()
+
#主题设置,用于调整图形细节(可选)
labs()
#添加标签,如图形标题、坐标轴标题等(可选)绘图语法首先,使用ggplot()函数创建图形对象。该函数有data和mapping两个主要参数,用于定义绘图时使用的数据以及图形属性映射。其中data的数据格式为数据框;mapping为变量的属性映射,主要使用aes函数来映射变量x和y的位置(坐标轴),也以用来控制颜色(color)、大小(size)或形状(shape)、填充变量等其次,使用geom_xxx()函数用于创建图形。geom_xxx()下划线后面指定要绘制的图形2.2ggplot2简介可选部分主要用于图形的修改和美化等设置比如,使用标度函数scale_xxx()来设置颜色、坐标轴等;使用coord_xxx()函数将直角坐标转换成极坐标、将x轴和y轴互换等;使用theme_xxx()函数设置图形主题;使用labs()函数设置图形标题,等等图形外观——坐标轴设置图形外观主要是指图形中各种元素的设置图形元素(graphicelement)包括两大类表示数据的元素,如条形图中的条、散点图中的点、折线图中的线等不表示数据的元素(非数据的元素),如图形的坐标轴(axis)、标签(label)、标题(title)、图例(legend)、主题(theme)等本节只介绍图形中非数据元素的设置,数据元素的设置将在以后各章的绘图中得以体现2.2ggplot2简介图形外观——坐标轴设置坐标轴包括坐标轴刻度(如刻度线的位置和数量)、数值范围、刻度标签(如数值变量刻度位置表示的数值或类别变量刻度位置表示的类别名称)、坐标轴标题(坐标轴表示的变量名称)等通常情况下,ggplot2默认设置的坐标轴基本上能满足需要,但有时也要做适当修改。比如,修改坐标轴刻度线的数量和位置,刻度标签字体大小和角度,x轴和y轴的数值范围,坐标轴标题的字体大小、顺序和摆放方式,等等2.2ggplot2简介图形外观——坐标轴设置图(a)是默认绘制的类别轴(本图为x轴)顺序是R语言、Python语言,使用scale_x_discrete(limits=c())可根据需改变类别顺序图(b)是设置coord_flip()使坐标轴互换,同时,将x轴(类别轴)标签旋转90度图(c)使用theme(axis.title.x=element_blank())移除y轴标签,要移除x轴标签使用类似的设置;设置theme(axis.ticks.y=element_blank())移除y轴的刻度线图(d)使用theme(axis.ticks=element_blank())移除所有的刻度线,将坐标轴标签旋转是为了改变标签的角度。当标签较多时,也可以设置scale_x_discrete(guide=guide_axis(n.dodge=2))使x轴标签排成为2行。使用xlim()可以数值x轴的数值范围。设置x轴数值范围时,函数会在该范围内设置坐标轴刻度,重新设置刻度线可以使用scale_x_continuous(limits=c(),breaks=c())2.2ggplot2简介图形外观——标题设置ggplot2绘制的图形不添加标题,使用ggtitle("")函数可以添加标题也可以使用labs(title="")函数添加标题使用主题函数temem可以设置标题的字体大小等2.2ggplot2简介图形外观——图例设置默认情况下,ggplot2绘制的图形会自动添加图例,并将图例放在图形的最右侧使用函数theme()可以修改图例,包括删除图例、改变图例的位置、设置图例字体的大小等使用guides()函数可以修改图例标题、改变图例的排放方式等2.2ggplot2简介图形外观——标签设置在可视化过程中,有时会涉及多个变量,有些变量名称可能较长,这时产生的坐标轴标签或图例标签就可能会重叠或相互遮盖,不仅难以识别,也影响影响美观有些可以通过标签角度旋转的办法解决,有些则需要另行处理2.2ggplot2简介图形外观——标签设置在有些图形中,需要在图中添加数据标签或数据对应的名称标签等使用ggplot2包中的geom_text函数可以为图形添加标签,但当标签较多时会产生重叠或相互遮盖。这时可以使用ggrepel包中的geom_text_repel函数替代geom_text函数添加标签,以避免标签重叠为条形图填充标签,可使用ggfittext包中的geom_bar_text或geom_fit_text函数为图形添加曲线文本标签,可使用geomtextpath包中的函数,等等2.2ggplot2简介图形外观——主题设置使用theme来控制所有非数据显示的完整主题函数默认使用theme_grey()或theme_gray()主题,即带有灰色背景和白色网格线的标志性ggplot2主题可选主题有theme_bw(),经典的黑白主题,;theme_minimal(),没有背景注释的简约主题;theme_classic()外观经典的主题,有x和y轴线条,没有网格线;theme_void()完全空的主题(无主题),等等2.2ggplot2简介图形外观——主题设置ggthemes包提供了20多种ggplot2图形的扩展主题2.2ggplot2简介图形注释为图形添加注释的函数主要是annotate,它可以为图像添加多种不同的注释信息2.2ggplot2简介图形分面图形分面(facet)就是要将多个子图排列成矩阵网格的形式,排列后的多个子图形成一幅独立的图形使用facet_wrap函数或facet_grid函数可以对图形进行分面2.2ggplot2简介图形组合图形分面是将多幅同类图形排列成网格形式,其中的格子大小在多数情况下是相同的。图形组合则是将多幅独立的不同图形组合成R×C的网格形式,其中格子大小可以相同,也可以不相同要将ggplot2绘制的多幅独立图形组合成一幅图形,可以使用patchwork包中的算法组合、gridExtra包中grid.arrange函数和arrangeGrob函数、cowplot包中的plot_grid函数等。patchwork是用于ggplot2及其扩展包的图形对象的拼图包,它使用运算符(”+”、“|”、“/”等符号组合图形)来拼图,使用简单,功能强大,可根据需要组合各种图形。与其他图形组合方法相比,该包的组合效果更好,尤其是对于复杂图形的组合2.2ggplot2简介图形组合2.2ggplot2简介patchwork包组合的图形常用函
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025四川绵阳市水务(集团)有限公司招聘党务管理等岗位17人笔试参考题库附带答案详解(3卷)
- 2026年及未来5年市场数据中国太阳能光伏接线盒行业市场竞争格局及发展趋势预测报告
- 2026年及未来5年市场数据中国木材加工行业市场发展数据监测及投资策略研究报告
- 2026年及未来5年市场数据中国公路行业市场深度研究及投资规划建议报告
- 2026年及未来5年市场数据中国汽车节能减排行业市场发展数据监测及投资潜力预测报告
- 2026年医院领导班子述职述廉报告
- 广东省韶关市2024-2025学年八年级上学期期末地理试题(含答案)
- 2026年文山州教育体育局所属事业单位选调工作人员(37人)笔试参考题库及答案解析
- 2026重庆市九龙坡区锦苑小学校招聘1人考试参考试题及答案解析
- 2026红河县公安局公开招聘警务辅助人员(24人)考试备考试题及答案解析
- 地坪漆施工方案范本
- 【《自适应巡航系统ACC的SOTIF风险的识别与评估分析案例》4100字】
- 阿坝州消防救援支队2026年面向社会公开招聘政府专职消防员(69人)笔试备考试题及答案解析
- 2025宁波市甬北粮食收储有限公司公开招聘工作人员2人笔试参考题库及答案解析
- 供应链年底总结与计划
- 2026年国有企业金华市轨道交通控股集团招聘备考题库有答案详解
- 2025年电子工程师年度工作总结
- 2026年吉林司法警官职业学院单招职业技能笔试备考题库带答案解析
- 2025年高职第三学年(工程造价)工程结算与审计测试题及答案
- 2024年曲阜师范大学马克思主义基本原理概论期末考试真题汇编
- 2025年低压电工理论考试1000题(附答案)
评论
0/150
提交评论