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

连载「数据可视化」在同一个图形中输出多个箱线图的4种R代码实现

bigegpt 2024-08-14 14:51 2 浏览

在同一副图形中输出多个箱线图用于比较数据的分布情况是探索分析阶段一个比较常见的需求,本文介绍四种使用R来实现的方法。

先说一下本案例使用的数据的背景:该数据集为广州2013~2015年每年的1月1日~11月17日的每日平均气温数据。做此分析的目的,是为了说明广州2015年比过去两年更热。

完整的分析过程见这篇文章《数据分析完整过程演示——气温数据分析》,本文抽出其中的箱线图部分,对箱线图的绘制进行详细介绍。

step1 载入数据

#设定工作目录,并从工作目录读取数据
setwd('D:/data_visual/data/4.3box_plot')
wea<-read.csv(file = "weather.csv",header = TRUE)
#查看数据的前6行head(wea)
## 日期 year2013 year2014 year2015 ## 1 1月1日 7 6 5 ## 2 1月2日 9 12 8 ## 3 1月3日 6 12 7 ## 4 1月4日 6 8 9 ## 5 1月5日 5 10 17 ## 6 1月6日 7 10 14

step2 绘制箱线图

要求:分别对13年、14年、15年的气温绘制箱线图,并尝试把他们显示在同一幅图形中以便于比较

方法一、用R基础包中的boxplot函数绘制箱线图,并使用par函数将输出的三幅图形显示在同一个画面中

par(mfrow=c(1,3)) boxplot(wea$year2013) boxplot(wea$year2014) boxplot(wea$year2015)

输出的三幅图形中,纵轴的起始位置不同,不便于比较。此方法不可用。

另外三种方法需要对数据进行变换(宽表变长表)

#将数据从宽表变成长表,需要使用reshape2包
library(reshape2)
weather<-melt(wea,id.vars = '日期',
variable.name = '年份',
value.name = '气温')
#查看转换后的数据格式head(weather)
## 日期 年份 气温 ## 1 1月1日 year2013 7 ## 2 1月2日 year2013 9 ## 3 1月3日 year2013 6 ## 4 1月4日 year2013 6 ## 5 1月5日 year2013 5 ## 6 1月6日 year2013 7

方法二、利用基本绘图函数绘制箱线图

#仍然使用基础包中的boxplot函数进行绘图,以公式y~x的形式输入数据
boxplot(weather$气温~weather$年份,col='skyblue',
main='广州2013~2015年每日气温数据箱线图')

4

纵轴起始位置相同,可以看出2015年的气温分布,中位数明显高于过去两年,2015对应的箱线图的箱体也更高一点。

下面的两种方法需要使用ggplot2包

#利用ggplot2包进行绘图
library(ggplot2)
#导入ggplot2的主题包
library(ggthemes)

方法三、使用ggplot2包中的qplot函数进行绘图

#以x,y的顺序排列数据
qplot(年份,气温,data = weather,geom = 'boxplot')+ theme_economist+ labs(title='广州2015年比过去两年更热',
subtitle='通过绘制箱线图进一步佐证条形图和线图得出的结论')

方法四、使用ggplot2包中的ggplot函数进行绘图

ggplot(weather,aes(x=年份,y=气温))+ geom_boxplot+ #使用ggtheme包中的经济学人主题 theme_economist+ labs(title='广州2015年比过去两年更热', 
subtitle='通过绘制箱线图进一步佐证条形图和线图得出的结论')

个人认为在数据探索阶段,Excel、SPSS、Python、R这四种工具比较起来,使用R进行探索性绘图,是相对来说最合适的。因为Excel数据量大时,很卡;SPSS同样卡,而且数据的整理和处理非常不方便;Python的绘图函数没有R中的好用,也不太容易记忆。R里面的ggplot2包很强大,花点时间掌握后,用起来非常方便。

相关推荐

为3D手游打造, Visual Studio Unity扩展下载

IT之家(www.ithome.com):为3D手游打造,VisualStudioUnity扩展下载7月30日消息,微软正式发布升级版VisualStudioToolsforUnity扩...

由ArcMap属性字段自增引出字段计算器使用Python的技巧

1.前言前些日子有人问我ArcMap中要让某个字段的值实现自增有什么方法?我首先想到像SQLServer中对于数值型字段可以设置自增。所以我打开ArcCatalog查看发现只提供默认值,没办法只能看...

微软首次回答 HoloLens 相关问题,终于爆料了

fengo2015/04/2115:11注:本文作者张静是NVIDIAGPU架构师,微信公众号“黑客与画家”(HackerAndPainter),知乎专栏地址。欢迎各位童鞋与他交流探讨。...

C#指针的应用(c#指针类型)

C#在有限的范围内支持指针。C#的指针只不过是一个持有另一类型内存地址的变量。但是在C#中,指针只能被声明为持有值类型和数组的内存地址。与引用类型不同,指针类型不被默认的垃圾收集机制所跟踪。出于同...

C# 堆栈(Stack)(c# 堆栈中定位调用messagebox 的地方)

C#集合在C#中,堆栈(Stack)是一种后进先出(LIFO,LastInFirstOut)的数据结构。堆栈(Stack)适用于存储和按顺序处理数据,其中最新添加的元素会最先被移除。堆...

欢迎回来:Fortran意外重回流行编程语言20强榜单

TIOBE指数是用来确定一种编程语言受欢迎程度的指标之一。它并不表明哪种编程语言是最好的,也不表明哪种编程语言写的代码行数最多,而是利用在谷歌、维基百科、必应、亚马逊、YouTube等各种引擎和网站上...

C#+NET MAUI实现跨平台/终端(linux,win,ios等)解决方案

简介.NETMulti-platformAppUI(.NETMAUI)是一个跨平台的框架,用于使用C#和XAML创建移动和桌面应用程序。使用.NETMAUI,您可以用一套代码库开发可以在A...

C#代码安全红线:SQL注入防护终极方案,让你的系统固若金汤

在数字化时代,应用系统的安全性至关重要。而SQL注入攻击,长期盘踞在OWASP(OpenWebApplicationSecurityProject)漏洞榜单的前列,成为众多基于数据库的应用系统...

C# (一)状态机模式(状态机代码实现)

最近空闲,炒炒隔夜饭,以前这些模式在自己项目种应用过不少,但一直没有像别人那样写一个系列,最近年纪大了,很多东西都忘记了,特别AI的兴起,更少写代码了,反正没什么事情,自己在重写一遍吧。创建型模式(5...

C# 中 Predicate 详解(c#中的replace)

Predicate泛型委托:表示定义一组条件并确定指定对象是否符合这些条件的方法。此委托由Array和List类的几种方法使用,用于在集合中搜索元素。Predicate<T>...

C#中$的用法?(c#中&&什么意思)

文章来自AI问答。在C#中,$符号用于字符串插值(StringInterpolation)。字符串插值是C#6.0引入的一种特性,它允许你在字符串中直接嵌入表达式,而不需要使用string.For...

C#并行编程:Parallel类(c# 并行处理)

在Parallel类中提供了三个静态方法作为结构化并行的基本形式:Parallel.Invoke方法:并行执行一组委托。Parallel.For方法:执行与C#for循环等价的并行方法。Parall...

颠覆认知!用Span重构foreach循环竟让数据处理快如闪电

在C#编程的世界里,数据处理效率始终是开发者们关注的焦点。随着项目规模的扩大和数据量的激增,哪怕是细微的性能提升,都可能对整个应用的响应速度和用户体验产生深远影响。近年来,C#引入的Span<T...

Unity3D手游开发实践《腾讯桌球》客户端开发经验总结

本次分享总结,起源于腾讯桌球项目,但是不仅仅限于项目本身。虽然基于Unity3D,很多东西同样适用于Cocos。本文从以下10大点进行阐述:1.架构设计2.原生插件/平台交互3.版本与补丁4.用脚本,...

.NET 7 AOT 的使用以及 .NET 与 Go 互相调用

目录背景C#部分环境要求创建一个控制台项目体验AOT编译C#调用库函数减少体积C#导出函数C#调用C#生成的AOTGolang部分安装GCCGolang导出函数.NETC#...