R语言基于表格文件的数据绘制具有多个系列的柱状图与直方图
本文介绍基于R语言中的readxl
包与ggplot2
包,读取Excel表格文件数据,并绘制具有多个系列的柱状图、条形图的方法。
首先,我们配置一下所需用到的R语言readxl
包与ggplot2
包;其中,readxl
包是用来读取Excel表格文件数据的,而ggplot2
包则是用以绘制柱状图的。包的下载方法也非常简单,以readxl
包为例,我们输入如下的代码即可。
install.packages("readxl")
输入代码后,按下回车
键,运行代码;如下图所示。
待readxl
包下载完成后,通过同样的方法配置ggplot2
包。
install.packages("ggplot2")
此外,在用代码进行数据分析、可视化时,有时需要对数据加以长数据与宽数据的转换(具体什么意思在后文有介绍),这里需要用到另一个R语言包reshape2
,我们也就在此将其一并配置好。
install.packages("reshape2")
接下来,我们即可开始代码的撰写。首先,我们将需要用到的包导入。
library(readxl)
library(ggplot2)
library(reshape2)
随后,我们进行Excel表格文件数据的读取;这里我们就通过readxl
包中的read_excel()
函数来实现表格数据的读取。其中,函数的第一个参数表示待读取的Excel表格文件路径与名称,第二个参数则表示这些数据具体在哪一个Sheet中;由于我这里需要的数据存放在Excel表格文件的第2
个Sheet中,因此就选择sheet = 2
即可。
xlsx_file <- read_excel(r"(E:\02_Project\01_Chlorophyll\ClimateZone\Split\Result\Result.xlsx)", sheet = 2)
其中,原本在表格文件中我的数据如下所示。
通过上述代码,我们即可将数据读入R语言中;其具体格式如下图所示。可以看到,读入后的数据是一个tibble
类别的变量,tibble
是Data Frame格式数据的一种改进,我们在这里可以就将其视作Data Frame格式数据加以后续处理。
此外,如果大家是使用RStudio软件进行代码的撰写,还可以双击这一变量,更直观地查看读入后的数据具体是什么样子的,如下图所示。
接下来,我们需要对数据加以长、宽转换。首先,简单来说,宽数据就是如上图所示的数据,而长数据则是如下图所示的数据;其中,我们在获取、记录原始数据时,往往获取的是宽数据,因为这一类数据具有更加直观、更易记录的特点;而在用数据分析软件或代码对数据加以深入处理或可视化操作时,往往系统需要的是长数据。因此,我们这里需要对宽数据与长数据加以转换;这一转换可以通过melt()
函数来实现,具体的代码如下所示。
xlsx_data <- melt(xlsx_file, id.var = "...1")
其中,melt()
函数的第一个参数表示需要进行转换的变量,第二个参数则是ID变量,一般情况下就是表述数据序号的第一列数据;我这里由于原本Excel的数据中就没有表示序号的那一列数据,因此就选择了原有数据的第一列作为ID变量。执行上述代码后,我们得到的长数据如下图所示。
此外,melt()
函数在运行时,还可以指定数据转换后的列名。如以下代码就表示,我们希望将转换后表示变量的列的名称设置为Factor
,表示观测值的列的名称设置为q
。
xlsx_data <- melt(xlsx_file, id.var = "...1", variable.name = "Factor", value.name = "q")
执行上述代码,得到的长数据如下图所示。
当然,这里需要提一句,关于宽数据与长数据的转换,涉及到很多内容;如果大家有需要,可以查看melt()
函数的官方帮助文档。
完成数据格式转换后,我们即可开始绘图。这里我们就直接通过ggplot2
包的ggplot()
函数,对柱状图加以绘制即可;具体代码如下所示。
ggplot(data = xlsx_data, mapping = aes(x = Factor, y = q, fill = ...1)) + geom_bar(stat = "identity", position = "dodge")
其中,ggplot()
函数的第一个参数data
表示需要参与绘图的数据,第二个参数mapping
表示我们需要用哪一列数据作为X轴,哪一列作为Y轴;同时,其内部的fill
参数表示我们需要将柱状图分为多个系列(如果大家的柱状图只有1
个系列,那么就不需要fill
这个参数了),其后指定的变量就表示我们需要基于这一变量对数据的系列加以区分。接下来,加号后面的geom_bar
参数,是我们绘制多序列柱状图所需要设定的,其中position
参数设置为"dodge"
就表示我们希望将不同的系列平行放置(如果不设置position
参数,那么不同系列的柱子就会垂直堆积,有点类似堆积柱状图)。
执行上述代码,得到如下所示的结果。
此外,如果大家希望柱状图是横向伸展的,就在最后增添+ coord_flip()
代码即可。
ggplot(data = xlsx_data, mapping = aes(x = Factor, y = q, fill = ...1)) + geom_bar(stat = "identity", position = "dodge") + coord_flip()
执行上述代码,得到如下所示的结果。
在这里,我们仅仅是对ggplot()
函数做了一个初步的介绍;关于其更深入的了解,大家直接查看其官方帮助文档即可。
至此,大功告成。
R语言基于表格文件的数据绘制具有多个系列的柱状图与直方图的更多相关文章
- R语言基于S4的面向对象编程
前言 本文接上一篇文章 R语言基于S3的面向对象编程,本文继续介绍R语言基于S4的面向对象编程. S4对象系统具有明显的结构化特征,更适合面向对象的程序设计.Bioconductor社区,以S4对象系 ...
- R语言:表格的线图转化
R语言:表格的线图转化 最先选取的是北京各区普通住宅成交十年(2016年及2006年)涨幅对比.这张图比较plain,主要拿来练习: 1.数据表格的基本整理及计算 2. 数据的初步分析 3.线图的基本 ...
- 写论文,没数据?R语言抓取网页大数据
写论文,没数据?R语言抓取网页大数据 纵观国内外,大数据的市场发展迅猛,政府的扶持也达到了空前的力度,甚至将大数据纳入发展战略.如此形势为社会各界提供了很多机遇和挑战,而我们作为卫生(医学)统计领域的 ...
- 【R笔记】R语言进阶之4:数据整形(reshape)
R语言进阶之4:数据整形(reshape) 2013-05-31 10:15 xxx 网易博客 字号:T | T 从不同途径得到的数据的组织方式是多种多样的,很多数据都要经过整理才能进行有效的分析,数 ...
- [R语言] 基于R语言实现树形图的绘制
树状图(或树形图)是一种网络结构.它由一个根节点组成,根节点产生由边或分支连接的多个节点.层次结构的最后一个节点称为叶.本文主要基于R语言实现树形图的绘制.关于python实现树形图的绘制见:基于ma ...
- [R语言] 基于R语言实现环状条形图的绘制
环状条形图(Circular barplot)是条形图的变体,图如其名,环状条形图在视觉上很吸引人,但也必须小心使用,因为环状条形图使用的是极坐标系而不是笛卡尔坐标系,每一个类别不共享相同的Y轴.环状 ...
- R语言读取excel文件的3种方法
R读取excel文件中数据的方法: 电脑有一个excel文件,原始的文件路径是:E:\R workshop\mydata\biom excel数据为5乘2阶矩阵,元素为 ...
- R语言进阶之4:数据整形(reshape)
一.通过重新构建数据进行整形 数据整形最直接的思路就把数据全部向量化,然后按要求用向量构建其他类型的数据.这样是不是会产生大量的中间变量.占用大量内存?没错.R语言的任何函数(包括赋值)操作都会有同样 ...
- 大数据基础--R语言(刘鹏《大数据》课后习题答案)
1.R语言是解释性语言还是编译性语言? 解释性语言 2.简述R语言的基本功能. R语言是一套完整的数据处理.计算和制图软件系统,主要包括以下功能: (1)数据存储和处理功能,丰富的数据读取与存 ...
- R语言绘图:时间序列分析 ggplot2绘制ACF PACF
R语言真是博大精深 方法一 Acf(gold[,2], type = "correlation",lag.max = 100) Acf(gold[,2], type = " ...
随机推荐
- MindSponge分子动力学模拟——多路径分子模拟(2024.05)
技术背景 在前面的MindSponge教程系列博客中,我们已经介绍过MindSponge分子动力学模拟框架的基础功能使用方法,例如MindSponge的安装与使用.定义分子系统.计算单点能和迭代器等等 ...
- 抖音越狱版本App下载
一.准备下载越狱版本抖音App 一般下载越狱版本App要不从越狱手机上Crack 正版App,另外一种从PP助手或者越狱市场进行下载,这里选择第二种方式 感谢 http://iosre.com/t/p ...
- ChatTTS,语气韵律媲美真人的开源TTS模型,文字转语音界的新魁首,对标微软Azure-tts
前两天 2noise 团队开源了ChatTTS项目,并且释出了相关的音色模型权重,效果确实非常惊艳,让人一听难忘,即使摆在微软的商业级项目Azure-tts面前,也是毫不逊色的. ChatTTS是专门 ...
- map数据类型
MAP数据类型是一个类似于对象的数据类型 大型项目中会经常使用 通过 构造函数来定义MAP数据类型 con ...
- 探索Native Plugins:开启大模型的技能之门
前言 上一章节我们了解了一下Semantic Kernnel中Plugins插件的概念以及学习了的 Semantic Kernel 模板插件的创建,本章节我们来学习 Native Plugins 原生 ...
- js jquery input radio点击事件
HTML: <input type="radio" name="myname" value="1" />1 <input ...
- Ansible-playbook剧本进阶
剧本高级特性篇 循环 在写 playbook 的时候发现了很多 task 都要重复引用某个相同的模块,比如一次启动10个服务,或者一次拷贝10个文件,如果按照传统的写法最少要写10次,这样会显得 pl ...
- python 使用pandas修改数据到excel,报“SettingwithCopyWarning A value is trying to be set on a copy of a slice from a DataFrame”的解决方法
场景: 通过pandas模块,将测试数据回写到excel,测试数据有写到excel文件,但控制台输出警告信息如下 警告: SettingwithCopyWarning A value is tryin ...
- Prometheus监控系统(一)Prometheus介绍
1. Prometheus简介 Prometheus受启发于Google的Brogmon监控系统(类似kubernetes是从Google的Brog系统演变而来).于2012年以开源形式发布,在201 ...
- 在KEIL中用JTAG仿真出错:error:cannot load driver".....JL2CM3.dll" 时的解决方法
在KEIL中用JTAG仿真出错:error:cannot load driver".....JL2CM3.dll" 时的解决方法 报错: Error:Cannot load dri ...