0
点赞
收藏
分享

微信扫一扫

设计模式之中介者模式(上)

Lattice绘图系统有自己的绘图函数,主要是在Lattice包里面,其中最常用的就是xyplot,其他比较常用的还有bwplot,histogram,stripplot,dotplot,splom,levelplot,contourplot等等。

xyplot函数

函数原型:xyplot(y~x|f*g,data,....)

其中只有|左边的y~x和data参数是必须的,其余均可以省略。y~x用于指定因变量与自变量,f*g提供了一个分类变量,如果不写,就表示我们不关心x,y与另外一个变量的交互作用,data是y与x的来数据源。

比如执行代码xyplot(Temp~Ozone,data=airquality),就得到了一幅这样的图像

实际上Lattice绘图系统与Base绘图系统的一个区别就是Base绘图系统是直接把图像打印在了屏幕上,而Lattice绘图系统中的绘图函数比如xyplot实际上执行完毕之后得到的是绘图所要的各种信息,但是由于会自动执行print函数并把xyplot得到的信息作为参数,所以效果上来看好像是xyplot函数直接打印了一幅图像出来,实际上我们可以来测试一下这个区别,我们运行这两句代码

得到的结果与上面的图是一样的

如果不把xyplot产生的绘图信息(类对象)使用变量保存起来,R就会自动把这幅图打印出来。

接下来我们还想看看Temp与Ozone是如何与Month进行交互的。而xyplot函数的|右边要求参数f*g必须是一个因子类型

于是执行代码airquality$Month

可以看到一共有五个月份,我们还可以引入参数layout=c(5,1)来使得布局为一行五列(虽然传参的时候看起来是五行一列,这个参数就是挺别扭)

可以直观地观察到Temp与Ozone的关系与月份有关。

再来举一个使用Lattice绘图系统观察分类变量与数值变量交互的例子

首先设置一个种子数,设置种子数的目的是让每次产生的随机数相同,这种操作的意义是如果我们在测试某段代码的时候发现代码有问题,想要让别人帮忙检查,如果不设置种子数,就无法产生一样的随机数,那别人就不能重复跟我们一样的步骤了。

然后从均值为0,标准差为1的正态分布中随机抽取了一百个数赋给向量x

又生成了一百个随机数赋给了向量f,f中只有0和1,每个数字重复了五十次。前50个数字是0,后50个数字是1。这个f后面就要被转化成因子类型并作为一个分类变量使用。

然后执行了一句代码叫做y

因为我们要观察x,y与分类变量的关系,但是现在f还不是一个分类变量,因为如果要成为一个分类变量f因该是因子类型,而现在f是一个向量。为了让f成为一个分类变量,我们要把他转化成因子

运行代码f

一切准备就绪之后就可以使用xyplot进行绘图了

运行代码xyplot(y~x|f,layout=c(2,1)),表示自变量是x,因变量是y,分类变量是因子f,布局是一行两列的形式(虽然写的时候看起来参数的意思是两行一列,这个运行结果就是这样,不用深究,记住这么传参数就行了,他这个参数就是有点别扭),运行结果如图

panel函数

在R语言的Lattice绘图系统中,panel 函数是一个非常重要的组件,它允许用户自定义每个面板(panel)中的图形内容。在Lattice中,多面板图形是由多个“条件”或“分层”变量自动分割数据并创建的,每个分割的数据子集都会在图形的单独面板中绘制。

函数原型:panel.function(args...)

这里的 panel.function 是一个用户定义的函数,它接受任意数量的参数 args,并根据这些参数来绘制每个面板。在Lattice的 xyplot、trellis.plot 等函数中,panel 参数通常被用来指定这个自定义的绘图函数。

这个函数通常可以作为xyplot函数的一个参数传入,比如

其中v代表画一条垂直的线,h代表画一条水平的线。lmline用来画一条回归直线。

举报

相关推荐

0 条评论