1. 长数据是什么鬼?

之前介绍了如何将多个性状的箱线图放在一个图上,比如learnasreml包中的fm数据,它有h1~h5五年的株高数据,想对它进行作图。

「数据预览:」

> library(learnasreml)> data(fm)> head(fm)  TreeID Spacing Rep   Fam Plot    dj    dm    wd h1  h2  h3  h4  h51  80001       3   1 70048    1 0.334 0.405 0.358 29 130 239 420 6302  80002       3   1 70048    2 0.348 0.393 0.365 24 107 242 410 6003  80004       3   1 70048    4 0.354 0.429 0.379 19  82 180 300 5004  80005       3   1 70017    1 0.335 0.408 0.363 46 168 301 510 7005  80008       3   1 70017    4 0.322 0.372 0.332 33 135 271 470 6706  80026       3   1 70002    2 0.359 0.450 0.392 30 132 258 390 570

这里,相对h1,h2,h3,h4,h5这五个性状进行作图,我们可以将其转化为「长数据」

问题来了,什么是「长数据」,什么是「宽数据」(不是短数据,这不是反义词,谢谢)

「宽数据:」

即变量是多列数据,每一列都是一个值,比如株高数据,第一年的株高是一列,第二年的株高是一列,第三年的株高是一列,这些数据就是宽数据。

ID 2018height 2019height 2020heightt
ID001 12 14 18
ID002 11 14 19
ID003 14 15 16

「长数据:」

即变量是,数据都在一列,比如株高数据,第一列是ID,第二列是年份,第三列是株高,这种数据叫长数据。

ID 年份 株高
ID001 2018 12
ID001 2019 14
ID001 2020 18
ID002 2018 11
ID002 2019 14
ID002 2020 19
ID003 2018 14
ID003 2019 15
ID003 2020 16

「tidyverse」系列包,喜欢长数据,无论是清洗数据,还是汇总统计,还是ggplot2可视化,都喜欢长数据。

飞哥注:我今天明白了这个道理,即tidyverse系列喜欢长数据,感觉打开了任督二脉,对于数据处理又有了新的理解。

2. 怎么转化为长数据

我知道三种方法:

  • reshape2的melt函数,现在还知道这个包的人,R龄应该在5年以上了,反正我一直都用,很好用,但是被作者嫌弃了,现在被很多人嫌弃了……
  • data.tablemetlt函数,和reshape2包的函数同名,用法也相似,可以对DT数据处理,很快。现在我用melt函数时,就不用载入reshape2了,直接用data.table包就行
  • tidyverse中的tidyr中的pivot_longer函数,这个更简单,用过这个函数,再也没有迷路过。因为melt函数语法比较复杂,经常需要查看帮助文档或者以前的笔记。

看一下最简单的方法吧,看一下数据:

> dd = fm[,c(1,9:13)]> head(dd)  TreeID h1  h2  h3  h4  h51  80001 29 130 239 420 6302  80002 24 107 242 410 6003  80004 19  82 180 300 5004  80005 46 168 301 510 7005  80008 33 135 271 470 6706  80026 30 132 258 390 570

然后用pivot_longer函数,将其转化为长数据:

> re = dd %>% pivot_longer(.,-1,names_to = "Year",values_to = "Height") > head(re)# A tibble: 6 x 3  TreeID Year  Height

1 80001  h1        292 80001  h2       1303 80001  h3       2394 80001  h4       4205 80001  h5       6306 80002  h1        24

代码解释:

  • 我用了管道符%/%,将数据传递给pivot_longer
  • 第二个-1,意思是除了第一个不处理,其它都处理,也可以用2:6表示第二到第六列处理
  • 第三个names_to是变量的名称,这里定义为Year
  • 第四个values_to是保存的性状名,这里是Height

可以看到,长数据有3列,分别是:

  • TreeID
  • Year
  • Height

3. ggplot2作图怎么搞

之前我使用ggplot2作图时,想做什么图,就在网上copy代码,然后根据自己的数据名称,修改代码,然后运行代码。一次性代码,用过就忘,半吊子水平,一直很稳定。

当我知道了ggplot2用长数据之后,又是另一种理解:

library(ggplot2)re %>% ggplot(.,aes(x = Year, y = Height, colour = Year)) + geom_boxplot()

先看图片:

成功了,图片比较满意,第一个是h1的株高,第二个是h2的株高,依次类推。但是代码是什么意思呢?

我看了ggplot2的入门,画图分为三个部分:

  • 数据在哪里:re是数据
  • x轴,y轴在哪里:x轴是Year,y轴是Height
  • 画什么类型的图:这里是箱线图,所以是geom_boxplot

「如果是画分组散点图:」

re %>% ggplot(.,aes(x = Year, y = Height, colour = Year)) + geom_point()

「如果是画分组分散的散点图:」

re %>% ggplot(.,aes(x = Year, y = Height, colour = Year)) + geom_jitter()

4. 所以散点图和箱线图结合呢?

直接用+连接就行了,感觉到了画家作图的快乐,算是丫丫学徒吧,哈哈

re %>% ggplot(.,aes(x = Year, y = Height, colour = Year)) +  geom_jitter() + geom_boxplot()

5. 感受

所以,这就是学习的快乐了!

R语言进阶笔记1 | 深挖一门语言的必要性

ggplot2箱式图两两比较_R语言进阶笔记2 | 长数据与ggplot2相关推荐

  1. ggplot2箱式图两两比较_R语言ggplot2箱线图绘图总结

    主要从如何看图.用图与作图三个方面来对箱线图进行理解和总结. 1.看图 箱线图概述图1 箱线图概述图2 如图所示,箱线图是将一组数据按照大小顺序排列后进行绘制的,包含6个数据节点,分别表示出数据的上边 ...

  2. ggplot2箱式图两两比较_第十九章_使用ggplot2进行高级绘图

    介绍ggplot2包 使用形状.颜色和尺寸来对多元数据进行可视化 用刻面图比较各组 自定义ggplot2图 19.1 R中的四种图形系统 基础 grid lattice ggplot2(用的较多) g ...

  3. ggplot2箱式图两两比较_个人向ggplot2箱线图总结

    主要从如何看图.用图与作图三个方面来对箱线图进行理解和总结. 1.看图 箱线图概述图1 箱线图概述图2 如图所示,箱线图是将一组数据按照大小顺序排列后进行绘制的,包含6个数据节点,分别表示出数据的上边 ...

  4. ggplot2箱式图两两比较_如何在ggplot2图形上添加显著性差异注释?

    研究者常常要比较两组数据是否有统计学差异,并且要将这种差异在图形上通过线和注释标注出来. ggplot2包是一个很好的可视化包,ggsignif包是ggplot2包的一个扩展包. 今天来学习怎么在gg ...

  5. ggplot2箱式图两两比较_作图技巧024篇ggplot2在循环中的坑

    "ggplot2在循环中的输出"生活科学哥-R语言科学 2020-12-23  8:28ggplot2用过之后,你肯定会爱上它:结合一些不错的包,可以得到非常有展现力的图片,但是呢 ...

  6. r语言中将茎叶图旋转90度_R语言(02)绘图

    基本图形的绘制 在R语言(01)中,最后的一个综合训练,我们生成了一部分数据,现在我们就用这些数据为例,来展示R是如何绘制一些图表的. 数据的导入 通过读取数据文件,我们可以导入之前产生的数据. 1 ...

  7. 14c语言合并两个字符串,C语言的标识符和字符数据、字符串数据.ppt

    1·2 C语言的标识符和字符数据.字符串数据 本节的任务是掌握用printf()函 数在屏幕的任意位置打印字 符组成的图案. 1·2·1 C语言的字符串数据.字符数据和转义字符 • 例1_1_2 用p ...

  8. R语言在图上标出点坐标_R语言绘制平行坐标图(PCP)示例

    R语言绘制平行坐标图(PCP)示例 前文在讲述 时提到了,它在某种形式上是平行坐标图( parallel coordinate plot,PCP)的一种变体,那么本篇顺便提一下什么是平行坐标图. 平行 ...

  9. r语言集合补集_R语言学习笔记(14)-常用包

    一.reshape2包对数据格式进行转换 > x + data = 1:5) > y + data = 1:5) > x k1 k2 data 1 NA 1 1 2 NA NA 2 ...

最新文章

  1. squid+iptables实现透明代理
  2. redis分布式锁实现思路
  3. 我们如何从VC++开始“编程”?
  4. conflicting types for xx错误
  5. android 获取控件高度_安卓开发入门教程UI控件_ImageView
  6. MyBatis 一个数据持久层(ORM)框架
  7. javascript杂记
  8. 薪资/薪水/金额的数据类型
  9. 莫烦Matplotlib可视化第二章基本使用代码学习
  10. django-添加学生的制作-模块的封装
  11. 让StringGrid控件显示下拉菜单
  12. 18个黑科技网站,你想要的软件都能找到,请收藏!!!
  13. Bishop-Pattern-Recognition-and-Machine-Learning-2006 pdf转html并翻译
  14. 易语言python支持库_易语言python
  15. 机器视觉Halcon教程(1.介绍)
  16. 学习计算机语言入门必看
  17. MySQL随机生成六位数验证码
  18. 请来围观:WPF开发的微信客户端!!!
  19. UML统一建模实用教程 第六章 包图
  20. android 启动流程

热门文章

  1. 测试Spring Boot有条件的合理方式
  2. 使用网真和WAD热部署Kubernetes
  3. Jakarta EE,EE4J和Java EE之间的关系
  4. Java命令行界面(第12部分):CLAJR
  5. Tabs vs Spaces:如何在Google,Twitter,Mozilla和Pied Piper上编写Java
  6. 将数据压缩到数据结构中
  7. Java抽象– ULTIMATE教程(PDF下载)
  8. 使用不可序列化的属性序列化Java对象
  9. 常见Java错误的十大列表(前100名!)
  10. 2013年测试基于Web的Spring应用程序(第1部分)