gganimate |让你的图动起来!

这是ggplot中十分可爱的一个扩增包,目的只有一个,就是让你的图动起来!就是酱紫!

gganimate扩展了GGPLOT2实现的图形语法,包括动画描述。它通过提供一系列新的语法类来实现这一点,这些类可以添加到绘图对象中,以便自定义它应该如何随时间变化。

下面是他的参数:

transition_*()定义了数据应该如何展开以及它与时间的关系。
view_*()定义位置比例应如何沿动画更改。
shadow_*()定义如何在给定的时间点呈现来自其他时间点的数据。
enter_*()/ exit_*()定义新数据应如何显示以及旧数据在动画过程中应如何消失。
ease_aes()定义了在过渡期间应该如何进行过渡。

举个栗子!

#安装辅助包,该包有两个版本,已经更新为最新版本,老版本在未来将不再支持。install.packages("gganimate")# 安装开发版
# install.packages('devtools')
# devtools::install_github('thomasp85/gganimate')
library(ggplot2)
library(gganimate)ggplot(mtcars, aes(factor(cyl), mpg)) +geom_boxplot() + geom_point() +# Here comes the gganimate codetransition_states(gear,transition_length = 2,state_length = 1) +enter_fade() +exit_shrink() +ease_aes('sine-in-out')

加载时间是比较长的,需要耐心等待哈!

又一个例子

首先查看一下数据格式吧,Gapminder是关于预期寿命,人均国内生产总值和国家人口的数据摘录。

library(gapminder)
head(gapminder)#我们看一下数据格式

ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, colour = country)) +
#点的大小和颜色分别由pop和country决定;geom_point(alpha = 0.7, show.legend = FALSE) +scale_colour_manual(values = country_colors) +        #进行数值之间的映射scale_size(range = c(2, 12)) +                    #设置绘图符号大小scale_x_log10() +                              #连续数据位置的标准化facet_wrap(~continent) +                     #按照continent进行分类# Here comes the gganimate specific bitslabs(title = 'Year: {frame_time}', x = 'GDP per capita', y = 'life expectancy') +transition_time(year) +ease_aes('linear')#指数据变化的状态,线性发展比较缓慢

哈哈哈,现在我们以肿瘤数据为例进行演示一下:

我编了一组测试数据,其中将肿瘤分为I,II,III型,IV型为控制,然后分别显示了再不同样本中不同肿瘤分型下的部分基因的表达情况。

library(ggplot2)
library(gganimate)
#首先我们进行数据的读入data <- "subgroup,sample,gene,expression
I,Tumor,p53,12.725952
II,Tumor,p53,11.914176
III,Tumor,p53,12.315768
IV,Normal,p53,12.978894
I,Tumor,p53,11.93924
II,Tumor,p53,12.262185
III,Tumor,p53,11.538924
IV,Normal,p53,12.016589
I,Tumor,p53,12.302574
II,Tumor,p53,11.939233
III,Tumor,p53,12.803992
IV,Normal,p53,10.674506
I,Tumor,p53,12.569142
II,Tumor,p53,12.088496
III,Tumor,p53,9.971951
IV,Normal,p53,13.008554
I,Tumor,p53,12.804154
II,Tumor,p53,11.847107
III,Tumor,p53,12.081261
IV,Normal,p53,12.158431
I,Tumor,p53,11.096693
II,Tumor,p53,12.655811
III,Tumor,p53,11.509067
IV,Normal,p53,12.523573
I,Tumor,p53,11.3554
II,Tumor,p53,11.560566
III,Tumor,p53,10.969046
IV,Normal,p53,11.169892
I,Tumor,p53,12.884054
II,Tumor,p53,12.284268
III,Tumor,her2,9.575523
IV,Normal,her2,12.409381
I,Tumor,her2,12.114364
II,Tumor,her2,11.493997
III,Tumor,her2,10.987106
IV,Normal,her2,11.943991
I,Tumor,her2,11.171378
II,Tumor,her2,13.120248
III,Tumor,her2,12.628872
IV,Normal,her2,11.91914
I,Tumor,her2,12.36504
II,Tumor,her2,12.707354
III,Tumor,her2,12.54517
IV,Normal,her2,12.199749
I,Tumor,her2,13.184496
II,Tumor,her2,12.640412
III,Tumor,her2,12.716897
IV,Normal,her2,13.359091
I,Tumor,her2,11.760945
II,Tumor,her2,11.406367
III,Tumor,her2,11.984382
IV,Normal,her2,12.254977
I,Tumor,her2,11.579763
II,Tumor,her2,11.983042
III,Tumor,her2,12.566317
IV,Normal,her2,10.869331
I,Tumor,her2,10.910963
II,Tumor,her2,11.948207
III,Tumor,myc,12.363072
IV,Normal,myc,12.755182
I,Tumor,myc,11.922223
II,Tumor,myc,9.618839
III,Tumor,myc,12.693868
IV,Normal,myc,13.40685
I,Tumor,myc,11.871609
II,Tumor,myc,11.783704
III,Tumor,myc,12.485053
IV,Normal,myc,12.669123
I,Tumor,myc,11.653691
II,Tumor,myc,11.675768
III,Tumor,myc,12.744605
IV,Normal,myc,12.911619
I,Tumor,myc,12.008307
II,Tumor,myc,11.838161
III,Tumor,myc,12.590989
IV,Normal,myc,11.680278
I,Tumor,myc,11.719241
II,Tumor,myc,10.156746
III,Tumor,myc,11.84406
IV,Normal,myc,12.975393
I,Tumor,myc,10.963332
II,Tumor,myc,12.338216
III,Tumor,myc,12.030859
IV,Normal,myc,11.119114
I,Tumor,myc,12.661349
II,Tumor,myc,13.168166
III,Tumor,myc,11.707595
IV,Normal,myc,12.06719
I,Tumor,myc,12.463962
II,Tumor,myc,12.288819
III,Tumor,myc,12.036757
IV,Normal,myc,12.98055
I,Tumor,myc,11.343075
II,Tumor,myc,12.565481
III,Tumor,myc,12.279996
IV,Normal,myc,12.965189
I,Tumor,myc,12.946155
II,Tumor,myc,11.688462
III,Tumor,sox4,11.944477
IV,Normal,sox4,12.128177
I,Tumor,sox4,11.116105
II,Tumor,sox4,11.148871
III,Tumor,sox4,13.139244
IV,Normal,sox4,10.043207
I,Tumor,sox4,12.043914
II,Tumor,sox4,9.990576
III,Tumor,sox4,11.624263
IV,Normal,sox4,11.647402
I,Tumor,sox4,12.502176
II,Tumor,sox4,12.291812
III,Tumor,sox4,11.421913
IV,Normal,sox4,12.282511
I,Tumor,sox4,12.511991
II,Tumor,sox4,12.285322
III,Tumor,sox4,11.7884
IV,Normal,sox4,13.747552
I,Tumor,sox4,11.212993
II,Tumor,sox4,12.936845
III,Tumor,sox4,12.442484
IV,Normal,sox4,10.324288
I,Tumor,sox4,12.436421
II,Tumor,sox4,11.923122
III,Tumor,sox4,12.831474
IV,Normal,sox4,12.271537
I,Tumor,sox4,12.208086
II,Tumor,sox4,11.830799
III,Tumor,sox4,12.410238
IV,Normal,sox4,12.13912
I,Tumor,sox4,12.47"test <- read.csv(text=data,header=T)
head(test)

library(ggplot2)
ggplot(test,aes(x=subgroup,y=expression,fill=subgroup))+geom_boxplot()+geom_jitter()+theme_bw()                     #按照subgroup进行分型,并画出箱式图

同样对不同基因在各组中的分布情况进行描述:

library(ggplot2)
p <- ggplot(test,aes(x=subgroup,y=expression,fill=subgroup))+geom_boxplot()+geom_jitter()+theme_bw()
p +facet_grid(.~gene)#按照gene对各个小组进行分类

library(ggplot2)
library(gganimate)
p <- ggplot(test,aes(x=subgroup,y=expression,fill=subgroup))+geom_boxplot()+geom_jitter()+theme_bw()
p +transition_states(gene, state_length = 0)+labs(title = "{closest_state} expression")

想不想让你的数据动来动去,哈哈哈,不妨试试这个[R包!

如果想学习更多有关该R包的情况,可以点击:https://github.com/thomasp85/gganimate。|||||作者:清华大学医学院苑晓梅

道友,来Rstudio里面看动画了相关推荐

  1. 看动画学算法之:二叉搜索树BST

    文章目录 简介 BST的基本性质 BST的构建 BST的搜索 BST的插入 BST的删除 看动画学算法之:二叉搜索树BST 简介 树是类似于链表的数据结构,和链表的线性结构不同的是,树是具有层次结构的 ...

  2. 看动画学算法之:排序-基数排序

    文章目录 简介 基数排序的例子 基数排序的java代码实现 基数排序的时间复杂度 简介 之前的文章我们讲了count排序,但是count排序有个限制,因为count数组是有限的,如果数组中的元素范围过 ...

  3. c++排序数组下标_看动画学算法之:排序 - 基数排序

    简介 之前的文章我们讲了count排序,但是count排序有个限制,因为count数组是有限的,如果数组中的元素范围过大,使用count排序是不现实的,其时间复杂度会膨胀. 而解决大范围的元素排序的办 ...

  4. 高斯数学——看动画学奥数

    小学奥数举一反三B(1年级) 小学奥数举一反三B(1年级)_哔哩哔哩_bilibili [全86集]高斯数学--看动画学奥数(一年级) [全86集]高斯数学--看动画学奥数(一年级)_哔哩哔哩_bil ...

  5. 视频教程-Python零基础入门高薪必看动画课程-Python

    Python零基础入门高薪必看动画课程 从事多年的Web应用开发,拥有10余年一线开发经验和教学经验.曾在中国银行从事数据采集服务,现专注于Python教学相关工作.参与过O2O外卖平台系统.微信商城 ...

  6. 看动画轻松理解“递归”与“动态规划”

    作者 | 程序员小吴 来源 | 五分钟学算法 在学习「数据结构和算法」的过程中,因为人习惯了平铺直叙的思维方式,所以「递归」与「动态规划」这种带循环概念(绕来绕去)的往往是相对比较难以理解的两个抽象知 ...

  7. 看动画轻松理解「链表」实现「LRU缓存淘汰算法」

    作者 | 程序员小吴,哈工大学渣,目前正在学算法,开源项目 「 LeetCodeAnimation 」5500star,GitHub Trending 榜连续一月第一. 本文为 AI科技大本营投稿文章 ...

  8. java 插入排序_看动画学算法之:排序-插入排序

    简介 插入排序就是将要排序的元素插入到已经排序的数组中,从而形成一个新的排好序的数组. 这个算法就叫做插入排序. 插入排序的例子 同样的,假如我们有一个数组:29,10,14,37,20,25,44, ...

  9. 冒泡排序java代码_看动画学算法之:排序冒泡排序

    点击上方的蓝字关注我吧 程序那些事 简介 排序可能是所有的算法中最最基础和最最常用的了.排序是一个非常经典的问题,它以一定的顺序对一个数组(或一个列表)中的项进行重新排序. 排序算法有很多种,每个都有 ...

最新文章

  1. 【资源分享】数字图像处理MATLAB版冈萨雷斯+中文高清版+随书源码链接
  2. IIS 500错误,一步帮你搞定.
  3. KMP,深入讲解next数组的求解(转载)
  4. LeetCode 1332. 删除回文子序列
  5. php的添加语句怎么写,php修改语句怎么写
  6. 【java】java 1.8 之 supplier 理解
  7. VUE依赖ol版本问题:geotiff.js Unexpected token
  8. 蔚蓝网上书店项目js/jQuery部分
  9. CSS文字的属性(总结)
  10. 测试ssd软件哪个好,好物分享:安兔兔SSD测试工具
  11. Excel中的透视表和vlookup的用法简单讲解
  12. c语言做图书销售管理系统,C语言图书销售管理系统(38页)-原创力文档
  13. OSPF50个经典问题
  14. B站 根据BV 获取av号 api
  15. 实验1 进程管理实验-计算机操作系统
  16. Java语言与C语言的区别
  17. namedtuple使用
  18. 上网部署(锐捷交换机)
  19. jQuery(一)jQuery的认识和使用
  20. 带SN切换流程_抖音频繁切换账号会限流吗?抖音频繁切换账号会降权吗?

热门文章

  1. 作者:王融,中国信息通信研究院互联网法律中心副主任、高级工程师。
  2. 【Servlet】getInitParameter()发生空指针导致HTTP500的解决方案
  3. 全连接网络和卷积网络实践
  4. setTimeout保证浏览器可以实时接收到输入框内容
  5. 国际站 RDS MySQL 5.7 高可用版发布
  6. 用java实现云计算的两种趋势性方法
  7. SAP WM The Link Between TR and TO Document
  8. 总结————AJAX应用的五个步骤:
  9. Java牛角尖【003】:类初始化时的执行顺序
  10. 初学编程,你必须要打牢的几根“支柱”,地基越稳,成就越高!