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

R语言数据可视化系列(8)气泡图、折线图和马赛克图

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

今天介绍的可视化数据图形,主要用来解决以下数据的可视化问题。

  • 气泡图三个定量变量之间关系的可视化展示

  • 折线图:将散点图的点连接起来就可以得到折线图,用于两个定量变量之间关系的可视化展示

  • 马赛克图多个类别变量之间关系的可视化展示

气泡图

前面已经说过,通过三维图来展示三个变量之间的关系并不是最好的选择,因为其看上去虽然比较炫酷,但是信息传递可能并不是那么直观。

气泡图,首先创建一个二维散点图,然后用点的大小来代表第三个变量的值

symbols( ),用来创建气泡图

  • 查看数据:

## 查看数据
head(mtcars)

原始数据

  • 作图:

    • x轴代表车重wt

    • y轴代表每加仑英里数mpg

    • 气泡大小代表发动机排量disp

attach(mtcars)
r = sqrt(disp/pi) 
#根据第三个变量发动机排量disp确定气泡的半径
symbols(wt,mpg,circle=r,inches=0.3,fg="white",bg="lightblue",main="气泡图",ylab="每加仑英里数",xlab="车重")
#inches=0.3,用于控制圆圈的大小,默认是 1 inch
text(wt,mpg,rownames(mtcars),cex=0.6)
#text( ),用于添加气泡图中点的标签
detach(mtcars)

气泡图

从图中可以看出,随着每加仑汽油行驶英里数mpg的增加,车重wt和发动机排量disp都在逐渐减少。

折线图

将散点图中的点连接起来便可以得到折线图,相比于散点图,折线图更能刻画出数据的变动趋势

  • 查看数据:

head(Orange)
#查看数据集

原始数据

par(mfrow=c(1,2))
#设置画布为1行2列
t1=subset(Orange,Tree==1)
#取出树的种类为 1 的数据集
plot(t1$age,t1$circumference,xlab="年龄(days)",ylab="圆周(mm)",main="橘子树的生长情况")
plot(t1$age,t1$circumference,xlab="年龄(days)",ylab="圆周(mm)",main="橘子树的生长情况",type="b")

折线图

以上两幅图的主要区别取决于参数type="b"

折线图一般可用以下两个函数之一来创建:

    • plot(x,y,type=)

    • lines(x,y,type=)

其中,x和y是要连接的(x,y)点的数值型向量,type=的类型参见下表。具体的效果就不在这里展示了,感兴趣的同学可以自己画了试试看。

折线图类型

plot( )和lines( )函数工作原理并不相同。

plot( )函数是被调用时即创建一幅新图,而lines( )函数则是在已存在的图形上添加信息,并不能自己生成图形。

lines( )函数通常是在plot( )函数生成一幅图形后再被调用。如果对图形有要求,可以先通过plot( )函数中的type=n,来创建坐标、标题和其他图形特征,然后再使用lines( )函数添加各种需要绘制的曲线。

  • 查看数据的类型信息:

#查看数据的类型信息
str(Orange)
Classes 'nfnGroupedData', 'nfGroupedData', 'groupedData' and 'data.frame':	35 obs. of 3 variables:
$ Tree : Ord.factor w/ 5 levels "3"<"1"<"5"<"2"<..: 2 2 2 2 2 2 2 4 4 4 ...
$ age : num 118 484 664 1004 1231 ...
$ circumference: num 30 58 87 115 120 142 145 33 69 111 ...
- attr(*, "formula")=Class 'formula' language circumference ~ age | Tree
.. ..- attr(*, ".Environment")=<environment: R_EmptyEnv>
- attr(*, "labels")=List of 2
..$ x: chr "Time since December 31, 1968"
..$ y: chr "Trunk circumference"
- attr(*, "units")=List of 2
..$ x: chr "(days)"
..$ y: chr "(mm)"
  • 作图:

Orange$Tree=as.numeric(Orange$Tree)
#为了方便起见,将因子型转化为数值型
ntrees=max(Orange$Tree)
#获取树的总的种类
xrange=range(Orange$age)
yrange=range(Orange$circumference)
plot(xrange,yrange,type="n",xlab="年龄(days)",ylab="圆周(mm)")
colors=rainbow(ntrees)
linetype=c(1:ntrees)
#定义线的类型
plotchar=seq(18,18+ntrees,1)
#定义点的类型
for(i in 1:ntrees){
tree=subset(Orange,Tree==i)
lines(tree$age,tree$circumference,type="b",lty=linetype[i],pch=plotchar[i]) }
title("树的生长情况","折线图的一个示例")
legend(xrange[1],yrange[2],1:ntrees,col=colors,lty=linetype,pch=plotchar,title="Tree")

树的生长情况

从图中可以看出,Tree4和Tree5在整个时间段中一直保持着最快的增长速度,而且Tree5在大约600天的时候超过了Tree4。

马赛克图

用于多个类别变量数据的可视化。

在马赛克图(mosaic plot)中,嵌套矩形面积正比于单元格频率,其中该频率即多维列联表中的频率,颜色或阴影可表示拟合模型的残差值

利用vcd包中的mosaic( )函数绘制

mosai(table),table是数组形式的列联表

以Titanic数据集为例,该数据集包括生存/死亡人数乘客的船舱等级(一等,二等,三等和船员)性别(男/女),以及年龄(儿童/成年)等。

  • 查看数据:

ftable(Titanic)
#ftable( ),用来生成多维列联表
  • 作图:

library(vcd)
#载入需要的包
mosaic(Titanic,shade=TRUE,legend=TRUE)

马赛克图

马赛克图中隐含着大量的数据信息。例如:(1)从船员到头等舱,存活率陡然提高;(2)大部分孩子都处在三等舱和二等舱中;(3)在头等舱中的大部分女性都存活了下来;(4)船员中女性很少,导致改组的Survived标签重叠(图底部的No和Yes)。

颜色和阴影表示拟合模型的残差值。在本例中,蓝色阴影表明,在假定生存率和船舱等级、性别和年龄层无关的情况下,该类别的生存/死亡数通常超过预期值,红色阴影含义则相反。

图形表明,在模型的独立条件下,头等舱女性存活数和男性船员死亡数超过模型预期值,三等舱男性的存活数比模型预期

相关推荐

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删除...