4.1 R绘图概述

以下两个函数,可以分别展示二维,三维图形的示例:

>demo(graphics)

>demo(persp)

R提供了多种绘图相关的命令,可分成三类:

高级绘图命令:在图形设备上产生一个新的图区,它可能包括坐标轴、标签、标题等。

低级绘图命令:在一个己经存在的图形上加上更多的图形元素,如额外的点、线和标签。

交互式图形命令:允许交互式地用鼠标在一个已经存在的图形.上添加图形信息或者提取图形信息。

使用R语言作图,主要按照以下步骤进行:

①取原始数据,准备好绘图需要的变量。

②如有需要,对绘图区域进行设置、分割。

③绘制图形,例如创建坐标轴井绘制点图、曲线或其他类型的图。

④标注图形。对图形进行标注,包括在图形中添加标题、坐标轴标注、文字标注等。

⑤设置图形格式,添加图例。包括设置图形中的线宽、线型、颜色,标一记点的形状、大小、颜色,以及坐标轴格式等。

⑥保存和导出图形。按指定文件格式、属性保存或导出图形,以备以后使用。

4.2绘图区域分割

主要有三个函数par(), layout(), spiit.screen()可以完成图形区域的分割。

4.2.1函数par()

函数par() 可以将绘图区域分割成规则的几部分,例如par(mfrow=c(3,2))将图形区域分成3X2的多重图框,每块.显示一个图形,按行显示,也可以使用mfcol按列输入图形。

4.2.2函数layout()

layout()内部的参数是一个矩阵(matrix ),其通过定义矩阵来灵活地将图形区域进行分割,matrix默认按列输入。

layout(mat, widths = rep.int(1,ncol(mat)),heights = rep.int(1, nrow(mat)), respect = FALSE)

mat为矩阵,用于设置窗口的划分,矩阵的0元素表示该位置不画图,非0元素必须包括从1开始的连续整数值,比如,1,2,...,N,按非0元素的大小设置图形的顺序。widths用来设置窗口不同列的宽度,heights设置不同行的高度。例如:

layout(matrix(1:4,2,2))#将绘图区域分成2X2的多重图框。

layout(matrix(c(1,3,2,3),2,2))#将图形区域分成三个不规则的区域。

layout(matrix(c(1,1,2,3,2,3),2,3))#将图形区域分成如下的不规则区域。

分割完成后,通过指令layout.show(3)可以查看区域分割后的结构。要取消图形区域分割,输入指令layout(1)

4.2.3函数split.screen()

split.screen()同样由向量或矩阵灵活控制区域的分割方式。

>split.screen(c (2,1)) #释将图形区域分成上下两部分显示

[1] 1 2

>split.screen(c(1,2),screen=2)#将第二部分(下半区)又分割成两个区域

[1]3 4

>screen(1)#准备在第一个区域绘图

4.3二维图形

4.3.1高级绘图函数

1.函数plot()

plot()是最常用的高级绘图函数,这是一个泛型函数,其产生的图形依赖于参数的类型。

其他高级绘图函数:

高级绘图函数的参数设置:

函数hist()

hist(x, breaks = "Sturges",freq = NULL,probability= !freq,include.lowest = TRUE, right = TRUE,density = NULL, angle = 45, col = NULL, border = NULL,main = paste("Histogram of" , xname),xlim = range(breaks), ylim = NULL,xlab = xname, ylab,axes = TRUE, plot = TRUE, labels = FALSE,nclass = NULL, warn.unused = TRUE, ...)

4 .3.2多元数据绘图

> data(warpbreaks)

> coplot(breaks~1:54|wool*tension,data=warpbreaks,col="red",bg="pink",pch=21,bar.bg=c(fac="lightblue"))

4.3.3低级绘图函数

利用高级函数画出基本图形后,可使用低级绘图函数添加新的图形元素,如点、图例、标鉴等

4 .3.4图形美化

4.3.5交互式绘图命令

R的交互式函数允许用户直接用鼠标在一个图上提取和提交信息,最简单、最常用的函数是:

Locator(n,type="n",…)

> x=rnorm(10)

> plot(x)

> locator(5,"o",col="red")

$x

[1] 1.929092 4.018157 6.998556 10.034663

[5] 7.945598

$y

[1] 1.21499224 0.97074910 0.43574030

[4] 0.05192964 -0.70406106

R中另一个比较有意思的交互函数是identify()它用于在散点图中找出点。输入它之后,系统读取在图中鼠标按下时指针的坐标位置,然后搜索(x,y)指定的坐标点,如果这一点足够接近指针的位置,那么将在图中返回指定的图形元素。 identify(x, y, labels,…)

4.4三维图形

R中绘制三维图形的基本函数有三个,分别为:

image(x,y,z),产生长方形的网格,以不同颜色表示z的值。

contour(x,y,z),以等高线表示z的值。

persp(x,y,z),产生3D表面。

4.5 lattice程序包

lattice适用于多个变量的数据集绘图,其中的大部分函数是以一个公式作为主要的自变量.

例如y~x|z表示绘制Y关于x的图,并以变量z为分类依据,画出多个图。

> library(ggplot2)

> library(lattice)

> data(diamonds,package="ggplot2")

> sample=diamonds[sample(nrow(diamonds),1000),]

> xyplot(price~carat,data=sample,groups=cut,auto.key=list(corner=c(1,0)),type=c("p","smooth"),span=.7,main="PriceVS. Carat")

为了更好地按某一分类变量去比较数据,有些时候也需要分割图形区域。使用lattice绘图时,分割绘图区域的操作变得很简单,只要设置参数layout即可。lattice中含有绘制三维图形的函数,其中cloud()用于绘制三维散点图,与plot3d()效果相似,但可以进行分组绘图:wireframe()用于绘制3D表面图,它与基础包中的persp()效果相似。

> x=seq(-pi,pi,len=20)

> y=seq(-pi,pi,len=20)

> g=expand.grid(x=x,y=y)

> g$z=sin(sqrt(g$x^2+g$y^2))

> wireframe(z~x*y,data=g,drape=TRUE,aspect=c(3,1),colorkey=TRUE,main=expression(z=sin(sqrt(g$x^2+g$y^2))))

4.6 ggplot2程序包

ggplot2是R中用于绘图的高级程序包,它将绘图视为一种映射—数学空问到图形元索空间的映射,例如将不同的数值映射为不同的颜色或其他图形属性。ggplot2在画图时就是采用了类似photoshop的图层设计方式,允许用户一步步构建图形,并且便于图层的修改。

4.6.1快速绘图

qplot(x, y = NULL, ..., data, facets =NULL, margins = FALSE,geom = "auto", stat = list(NULL), position =list(NULL), xlim = c(NA,NA), ylim = c(NA, NA), log = "", main = NULL,xlab= deparse(substitute(x)), ylab = deparse(substitute(y)), asp = NA)

以diamonds数据集为例:

> sample=diamonds[sample(nrow(diamonds),200),]

> qplot(carat,price,data=sample,shape=cut,color)

在上述散点图中添加一条平滑曲线,通过method参数可以指定曲线拟合的方法,默认为method="loess"--平滑局部回归。参数span控制曲线的平滑程度,取值越大曲线越平滑。

> qplot(carat,price,data=sample,geom=c("point","smooth"),span=.3)

使用qplot()对变量carat画出更美观的直方图:

> qplot(carat,data=diamonds,geom="histogram",binwidth=.1,xlim=c(0,3),fill=color)

4.6.2分图层绘图

(1)数据和映射

ggplot(data,mapping=aes(x,y, <otheraesthetics>))

其中,data指定数据集:参数mapping用于构建映射,通常使用函数aes( )来指变量,还可以指定其他分类变量,如颜色,形状,大小等。

> sample=diamonds[sample(nrow(diamonds),1000),]

>p=ggplot(data=sample,mapping=aes(x=carat,y=price,color=clarity))#定义的第一图层存储于p中

(2)几何对象

基本图层确定了数据源和映射后,通过加号(+)就可以不断地添加新图层.第二图层添加几何对象类的函数,在图中绘制图形元素其他类型的图形,如直方图、箱线图等。如点、线、多边形等,还可以用来绘制.

上面函数内部的基本参数都是一样的。以散点图为例:

geom_point(mapping=NULL,data=NULL,stat=”identity”,position=”identity”,na.rm=FALSE,…)

参数mapping用于构建映射,data指定数据集,如果在第一图层己经指定,则可以省略:stat用于这一层数据的统计变换:position用于这一层图形的位置调整,常用于条形图(bar)和直方图,取值为“identity”时表示直接显示," dodge”为按分类变量并列放置," stack”为堆叠放置,"fill”显示相对比例;" jitter”为增加扰动,常用于散点图,防止图形过分重叠。

> p+geom_point()+geom_smooth()

对上面的图形进行整体平滑:

> p=ggplot(data=sample,aes(x=carat,y=price))

> p+geom_point(aes(color=clarity))+geom_smooth()

进行数据映射时,函数aes()可用于设置图形样式,通过参数color,shape和size分别设置点的颜色、形状和大小按哪些向量分类,通过这些参数,即使一个简单的散点图也可以传递大量信息。

>sample=diamonds[sample(nrow(diamonds),100),]

>p=ggplot(data=sample,aes(x=carat,y=price))

>p+geom_point(aes(color=color,shape=cut,size=clarity),alpha=.5,position="jitter")

(3)标度

标度负责控制图形属性的显示方式,主要包括设置坐标轴刻度,修改颜色取值、图例样式等。使用标度类的函数,相当于添加一个新的图层,因此仍然用“+”连接函数,除了基本图层ggplot()其他图层的设置都可以应用于函数qplot()

设置坐标轴样式的标度函数一般以“scale x"开头

(4)统计变换

统计变换函数以“stat”开头,它们可以对原始数据进行某种函数变换,是非常重要的功能。我们可以自定义函数,基于原始数据计算并在图上表现出来,也可以通过它们改变“geom_函数画图的默认统计参数。

例如用stat_smooth对数据作loess平滑,在carat-price散点图上添加非线性回归线。

> sample=diamonds[sample(nrow(diamonds),1000),]

> ggplot(sample,aes(x=carat,y=price))+geom_point()+scale_y_log10()+stat_smooth()

第二图层添加散点;第三图层对Y轴作log10变换;第四图层添加平滑的统计变换

(5)分面

当我们想要观察某一分类变量对数据的影响情况时,仅通过shape, color区分是不够的,需要根据变量的不同取值进行分组、分别绘图。这时就要用到facet数,它控制数据分组的方法和排列形式,进行条件绘图。

常用的函数是facet_wrap(~x, ncol),其中x表示分组变量,ncol表示图形的排列方式,即分成几列。也可以用facet_grid(x~.)替代。

> ggplot(sample,aes(x=carat,y=price))+geom_point(aes(colour=cut))+scale_y_log10()+stat_smooth()+facet_wrap(~cut,ncol=3)

(6)坐标系统

4.7图形保存

完成绘图后,最后一步是按照指定文件格式、属性保存和导出图形,以备以后使用。R绘制好的图可以保存成多种格式,对应的生成函数名即它的扩展名。可生成的文件格式有png jpeg和pdf:

png(file="myplot.png”,bg="transparent")

jpeg(file="myplot.jpeg”)

pdf(file="myplot.pdf”)

生成文件后,默认在后台扫一开,所以查看图形文件前需要用dev.off()关闭文件

此外,程序包ggplot2中的函数ggsave()也用于保存图形,并且可以指定为不同的文件类型。

ggsave(filename=default_name (plot),plot=last_plot(),

device=default_device(filename),path=NULL, scale=1,…)

filename指定生成文件的路径、名称及扩展名,文件路径也可以通过path设置;plot填写图形对象,默认为最后显示的图形:device指定要使用的设备,自动提取文件扩展名;scale为比例因子。将上面的饼图保存成一个pdf文件,只需要一条简单的指令就可以完成。

>ggsave(filename="d:/data/pie.pdf")

这样就生成了一个pdf文件,还可把图形保存成.png格式。

【数据分析 R语言实战】学习笔记 第四章 数据的图形描述的更多相关文章

  1. R语言可视化学习笔记之添加p-value和显著性标记

    R语言可视化学习笔记之添加p-value和显著性标记 http://www.jianshu.com/p/b7274afff14f?from=timeline   上篇文章中提了一下如何通过ggpubr ...

  2. R语言实战(一)介绍、数据集与图形初阶

    本文对应<R语言实战>前3章,因为里面大部分内容已经比较熟悉,所以在这里只是起一个索引的作用. 第1章       R语言介绍 获取帮助函数 help(), ? 查看函数帮助 exampl ...

  3. [Python学习笔记][第四章Python字符串]

    2016/1/28学习内容 第四章 Python字符串与正则表达式之字符串 编码规则 UTF-8 以1个字节表示英语字符(兼容ASCII),以3个字节表示中文及其他语言,UTF-8对全世界所有国家需要 ...

  4. R语言实战(十)处理缺失数据的高级方法

    本文对应<R语言实战>第15章:处理缺失数据的高级方法 本文仅在书的基础上进行简单阐述,更加详细的缺失数据问题研究将会单独写一篇文章. 处理缺失值的一般步骤: 识别缺失数据: 检查导致数据 ...

  5. 【数据分析 R语言实战】学习笔记 第十一章 对应分析

    11.2对应分析 在很多情况下,我们所关心的不仅仅是行或列变量本身,而是行变量和列变量的相互关系,这就是因子分析等方法无法解释的了.1970年法国统计学家J.P.Benzenci提出对应分析,也称关联 ...

  6. 【数据分析 R语言实战】学习笔记 第五章 数据的描述性分析(下)

    5.6 多组数据分析及R实现 5.6.1 多组数据的统计分析 > group=read.csv("C:/Program Files/RStudio/002582.csv") ...

  7. 【数据分析 R语言实战】学习笔记 第三章 数据预处理 (下)

    3.3缺失值处理 R中缺失值以NA表示,判断数据是否存在缺失值的函数有两个,最基本的函数是is.na()它可以应用于向量.数据框等多种对象,返回逻辑值. > attach(data) The f ...

  8. 从零开始系列-R语言基础学习笔记之二 数据结构(二)

    在上一篇中我们一起学习了R语言的数据结构第一部分:向量.数组和矩阵,这次我们开始学习R语言的数据结构第二部分:数据框.因子和列表. 一.数据框 类似于二维数组,但不同的列可以有不同的数据类型(每一列内 ...

  9. 从零开始系列--R语言基础学习笔记之一 环境搭建

    R是免费开源的软件,具有强大的数据处理和绘图等功能.下面是R开发环境的搭建过程. 一.点击网址 https://www.r-project.org/ ,进入"The R Project fo ...

随机推荐

  1. Sql数据库查询语言

    1.概述 Sql是一种面向数据库的结构化查询语言.是符合美国国家标准化组织ANSI的一种计算机标准语言. Sql具对数据库的操作有:增删改查.创建数据库.创建表.创建存储过程.创建视图等 RDBMS关 ...

  2. Cordova打包vue项目(Android)

    准备工作: 安装好必要环境: vue-cli,webpack,node.js,android环境 (http://cordova.axuer.com/docs/zh-cn/latest/guide/p ...

  3. linux输入yum后提示: -bash: /usr/bin/yum: No such file or directory的解决方案

    linux输入yum后提示: -bash: /usr/bin/yum: No such file or directory的解决方案 今天在安装程序时,发现有一个插件未安装,我就随手敲了一个命令,看都 ...

  4. C项目实践--学生成绩管理系统

    1.功能需求分析 学生成绩管理系统是对学生基本信息及成绩的管理.本程序主要实现了对学生的学号.姓名等基本信息以及各项学科成绩进行增加.删除.修改.查询和保存到磁盘文件等操作.主要功能描述如下: (1) ...

  5. cocos2dx笔记1:概述

    1.核心的类和功能 CCDirector gameLoop,实现场景绘制.多个场景之间切换控制.控制游戏的停止,暂停,等生命周期. CCScene 场景类,每一个场景能够理解为一个游戏镜头.状态 CC ...

  6. RFC 在OA中创建PR

    创建PR:BAPI_REQUISITION_CREATE BAPI_PR_CREATE                 "Create Enjoy Purchase Requisistion ...

  7. ionic 和cordova的区别是什么

    很多新朋友ionic基础教程都学完了,还是不知道ionic 和cordova 是什么关系 ionic是什么: Ionic(ionicframework)一款开源的Html5移动App开发框架,是Ang ...

  8. html5--项目实战-仿天猫(移动端页面)

    html5--项目实战-仿天猫(移动端页面) 总结: 1.标准搜索栏的做法:这里是弹性布局,放大镜和小话筒是background img 2.手机尾部导航做法:这是一个个 li 标签,每个li标签占% ...

  9. 并不对劲的noip2017d1t3

    因为A掉了d1t1,十分开心,把d1t3的代码调出来了. 一般情况下,noip每一天总有一道dp题,然而d1前两道题都不是,再看看第三题的数据范围,就能大概猜出是dp了. 这道题和最短路计数看上去很像 ...

  10. 洛谷 P1262 间谍网络 —— 缩点

    题目:https://www.luogu.org/problemnew/show/P1262 首先,一个强连通分量里有一个点被控制则所有点都被控制,所以先 tarjan 缩点,记一下每个连通块中能被收 ...