百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

用R语言做数据分析——lattice图形系统(一)

bigegpt 2024-08-26 11:03 2 浏览

条件变量

lattice图形的一个最强大之处便是可以添加条件变量。若添加一个条件变量,每个水平下都会创建一个面板。若添加两个条件变量,则会根据两个变量各个水平的组合分别创建面板。通常,没有必要添加两个以上的条件变量。

通常,条件变量是因子。但是,如果想以连续型变量为条件,该怎么办呢?一种方法是利用R语言的cut()函数将连续型变量转换为离散变量。另外,lattice包提供了一些将连续型变量转化为瓦块(shingle)数据结构的函数。特别地,连续型变量会被分割到一系列(可能)重叠的数值范围中。如函数:

myshingle <- equal.count(x, number=#, overlap=proportion)

将会把连续型变量x分割到#区间中,重叠度为proportion,每个数值范围内的观测数相等,并返回为一个变量myshingle(或类shingle)。输出或者绘制该对象(如plot(myshingle))将会展示瓦块区间。

一旦一个连续型变量被转换为一个瓦块,我们便可以将它作为一个条件变量使用。例如,用mtcars数据集来探究以发动机排量为条件时,每加仑英里数和车重的关系。由于发动机排量是一个连续型变量,首先需要将其转为一个三水平的瓦块变量:

displacement <- equal.count(mtcars$disp, number=3, overlap=0)

然后,在xyplot()函数中使用该变量:

xyplot(mpg~wt|displacement,data = mtcars,

main="Miles per Gallon vs. Weight by Engine",

xlab = "Weight", ylab = "Miles per Gallon",

layout = c(3,1), aspect = 1.5)

上图是以发动机排量为条件时加仑英里数与车重的栅栏图。由于发动机排量是一个连续型变量,因此将其转化为三个非重叠的、内部观测数相等呢个的瓦块。这里我们使用了选项来修改面板的布局(三列和一行)和宽高比,这样更方便对三组进行比较。

面板函数

每个高级绘图函数都调用了一个默认的函数来绘制面板。这些默认的函数服从如下命名惯例:panel.graph_function,其中graph_function是该水平绘图函数。如:

xyplot(mpg~wt|displacement, data=mtcars)

也可以写成:

xyplot(mpg~wt|displacement, data=mtcars, panel=panel.xyplot)

这是一个非常强大的功能,因为它使我们可以使用自定义函数替换成默认的面板函数。我们也可以将lattice包中50多个默认面板函数中的某个或多个整合到自定义的函数中。自定义的面板函数具有极大的灵活性,我们可以随意设计输出结果以满足要求。比如,我们绘制了以发送机排量为条件时汽油英里数与车重的散点图。若想添加回归线、轴须线和网格线该怎么办呢?此时我们便可以创建自己的面板函数:

displacement <- equal.count(mtcars$disp, number=3, overlap=0)

mypanel <- function(x,y){

panel.xyplot(x,y,pch = 19)

panel.rug(x,y)

panel.grid(h=-1,v=-1)

panel.lmline(x,y,col="red",lwd=1,lty=2)

}

xyplot(mpg~wt|displacement,data = mtcars,

layout = c(3,1),

aspect = 1.5,

main="Miles per Gallon vs. Weight by Engine Displacement",

xlab = "Weight", ylab = "Miles per Gallon",

panel = mypanel)

上图以发动机排量为条件时每加仑英里数与车重的栅栏图。这里我们使用了面板函数添加了回归线、轴须线和网格线。

这里我们将四个独立的绘制函数整合到自己的自己的mypanel()函数中,然后通过xyplot()函数中panel选项将其显示出来。panel.xyplot()函数生成了填充圆圈(pch=19)的散点图。panel.rug()函数在每个面板的x轴和y轴上添加了轴须线。panel.rug(x,FALSE)或panel.rug(FALSE,y)将分别只对横轴或纵轴添加轴须。panel.grid()函数添加了水平和竖直的网格线(使用负数强制它们与轴标签对齐)。最后,panel.lmline()函数添加了一条红色的(col="red")、标准粗细(lwd=1)的虚线(lty=2)回归线。每个默认的面板函数都有自己的结构和选项。

第二个例子,我们绘制以汽车传动类型为条件时每加仑英里数与发动机排量(连续型变量)的关系图。除了创建单独的自排和手排发动机的面板,我们还将添加平滑拟合曲线和水平均值线:

mtcars$transmission <- factor(mtcars$am, levels = c(0,1),

labels = c("Automatic","Manual"))

panel.smoother <- function(x,y){

panel.grid(h=-1,v=-1)

panel.xyplot(x,y)

panel.loess(x,y)

panel.abline(h=mean(y),lwd = 2,lty = 2,col = "green")

}

xyplot(mpg~disp|transmission,data = mtcars,

scales = list(cex=.8,col="red"),

layout = c(2,1),

panel = panel.smoother,

xlab = "Displacement", ylab = "Miles per Gallon",

main="MGP vs Displacement by Transmission Type",

sub="Dotted lines are Group Means", aspect = 1)

panel.xyplot()函数绘制了各个点,panel.loess()函数在每个面板中绘制了非参拟合曲线。panel.abline()函数在条件变量的各个水平下添加了mpg的均值线。若用h=mean(mtcars$mpg)替换h=mean(y),那么将只绘制整个样本集的一个mpg均值参考线。scales选项将标度的标注修改为红色和80%的默认大小。在这个例子中,我们也可以使用scales=list(x=list(), y=list())来分别设定横轴和纵轴的选项。

相关推荐

Docker篇(二):Docker实战,命令解析

大家好,我是杰哥上周我们通过几个问题,让大家对于Docker有了一个全局的认识。然而,说跟练往往是两个概念。从学习的角度来说,理论知识的学习,往往只是第一步,只有经过实战,才能真正掌握一门技术所以,本...

docker学习笔记——安装和基本操作

今天学习了docker的基本知识,记录一下docker的安装步骤和基本命令(以CentOS7.x为例)一、安装docker的步骤:1.yuminstall-yyum-utils2.yum-con...

不可错过的Docker完整笔记(dockerhib)

简介一、Docker简介Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,...

扔掉运营商的 IPTV 机顶盒,全屋全设备畅看 IPTV!

其实现在看电视节目的需求确实大大降低了,折腾也只是为了单纯的让它实现,享受这个过程带来的快乐而已,哈哈!预期构想家里所有设备直接接入网络随时接收并播放IPTV直播(电信点播的节目不是太多,但好在非常稳...

第五节 Docker 入门实践:从 Hello World 到容器操作

一、Docker容器基础运行(一)单次命令执行通过dockerrun命令可以直接在容器中执行指定命令,这是体验Docker最快捷的方式:#在ubuntu:15.10容器中执行ech...

替代Docker build的Buildah简单介绍

Buildah是用于通过较低级别的coreutils接口构建OCI兼容镜像的工具。与Podman相似,Buildah不依赖于Docker或CRI-O之类的守护程序,并且不需要root特权。Builda...

Docker 命令大全(docker命令大全记录表)

容器生命周期管理run-创建并启动一个新的容器。start/stop/restart-这些命令主要用于启动、停止和重启容器。kill-立即终止一个或多个正在运行的容器rm-于删除一个或...

docker常用指令及安装rabbitMQ(docker安装rabbitmq配置环境)

一、docker常用指令启动docker:systemctlstartdocker停止docker:systemctlstopdocker重启docker:systemctlrestart...

使用Docker快速部署Storm环境(docker部署confluence)

Storm的部署虽然不是特别麻烦,但是在生产环境中,为了提高部署效率,方便管理维护,使用Docker来统一管理部署是一个不错的选择。下面是我开源的一个新的项目,一个配置好了storm与mono环境的D...

Docker Desktop安装使用指南:零基础教程

在之前的文章中,我多次提到使用Docker来安装各类软件,尤其是开源软件应用。鉴于不少读者对此有需求,我决定专门制作一期关于Docker安装与使用的详细教程。我主要以Macbook(Mac平台)为例进...

Linux如何成功地离线安装docker(linux离线安装httpd)

系统环境:Redhat7.2和Centos7.4实测成功近期因项目需要用docker,所以记录一些相关知识,由于生产环境是不能直接连接互联网,尝试在linux中离线安装docker。步骤1.下载...

Docker 类面试题(常见问题)(docker面试题目)

Docker常见问题汇总镜像相关1、如何批量清理临时镜像文件?可以使用sudodockerrmi$(sudodockerimages-q-fdanging=true)命令2、如何查看...

面试官:你知道Dubbo怎么优雅上下线的吗?你:优雅上下线是啥?

最近无论是校招还是社招,都进行的如火如荼,我也承担了很多的面试工作,在一次面试过程中,和候选人聊了一些关于Dubbo的知识。Dubbo是一个比较著名的RPC框架,很多人对于他的一些网络通信、通信协议、...

【Docker 新手入门指南】第五章:Hello Word

适合人群:完全零基础新手|学习目标:30分钟掌握Docker核心操作一、准备工作:先确认是否安装成功打开终端(Windows用户用PowerShell或GitBash),输入:docker--...

松勤软件测试:详解Docker,如何用portainer管理Docker容器

镜像管理搜索镜像dockersearch镜像名称拉取镜像dockerpullname[:tag]列出镜像dockerimages删除镜像dockerrmiimage名称或id删除...