• 主页
  • 课程

    关于课程

    • 课程归档
    • 成为一名讲师
    • 讲师信息
    同等学历教学

    同等学历教学

    免费
    阅读更多
  • 特色
    • 展示
    • 关于我们
    • 问答
  • 事件
  • 个性化
  • 博客
  • 联系
  • 站点资源
    有任何问题吗?
    (00) 123 456 789
    weinfoadmin@weinformatics.cn
    注册登录
    恒诺新知
    • 主页
    • 课程

      关于课程

      • 课程归档
      • 成为一名讲师
      • 讲师信息
      同等学历教学

      同等学历教学

      免费
      阅读更多
    • 特色
      • 展示
      • 关于我们
      • 问答
    • 事件
    • 个性化
    • 博客
    • 联系
    • 站点资源

      R语言

      • 首页
      • 博客
      • R语言
      • 【R画图】使用R绘制其他图形之热图及网络图

      【R画图】使用R绘制其他图形之热图及网络图

      • 发布者 weinfoadmin
      • 分类 R语言
      • 日期 2016年2月16日
      测试开头

      热力图是一种非常常用的统计图形,该图将两个变量(一般是离散变量)的交叉汇总信息以颜色的形式展现出来,而映射给颜色变量的是连续型数值变量,下面就以例子说明热力图的优势:

      #模拟数据集 set.seed(123) Year <- rep(2006:2015, each = 4) Quater <- rep(c('Q1','Q2','Q3','Q4'), times = 10) Counts <- round(runif(40, min = 10, max = 200)) df <- data.frame(Year = Year, Quater = Quater, Counts = Counts)

      热力图可以通过stats包的heatmap()函数绘制,也可以通过ggplot2包中的geom_tile()函数或geom_raster()函数绘制,这里就以ggplot2包中的函数为例:

      library(ggplot2) #使用geom_tile()函数 ggplot(data = df, mapping = aes(x = Year, y = Quater, fill = Counts)) + geom_tile() #或者使用geom_raster()函数 ggplot(data = df, mapping = aes(x = Year, y = Quater, fill = Counts)) + geom_raster()

      【R画图】使用R绘制其他图形之热图及网络图

      两者绘制的结果区别不大,一般geom_raster()效率更高,且更适合打印。


      哎?这里发现三个问题:

      1)横坐标年怎么出现小数了?

      2)一般认为颜色越深代表的值越大,这里恰好相反

      3)季度坐标从上到下正好是反的季度顺序,能否颠倒一下?

      解决办法:

      1)将横坐标年份离散化,改为因子

      2)只需将默认颜色颠倒一下即可:scale_fill_continuous(low = '#56B1F7', high = '#132B43')

      3)对于离散变量可以使用scale_y_discrete(limits=c('Q4','Q3','Q2','Q1'))方法实现颠倒,对于连续变量可以直接使用scale_y_reverse()实现刻度的颠倒


      具体操作如下:

      ggplot(data = df, mapping = aes(x = factor(Year), y = Quater, fill = Counts)) + geom_tile() + scale_fill_continuous(low = '#56B1F7', high = '#132B43') + scale_y_discrete(limits=c('Q4','Q3','Q2','Q1')) + xlab('Year')

      【R画图】使用R绘制其他图形之热图及网络图

      这样就能非常快速的查看到哪年那季度的数量较多和较少,总比单纯的数字形式要强:

      head(df, 10)

      【R画图】使用R绘制其他图形之热图及网络图

      很显然,这是一个长形表,如何将其转换为宽形表呢?这里使用tidyr包中的spread()函数加以实现

      #长形表变宽形表 library(tidyr) spread(data = df, key = Quater, value = Counts)

      【R画图】使用R绘制其他图形之热图及网络图

      这就是将一个长形表变为宽形表后呈现的数值交叉表,如果这样一个数据给老板看,老板肯定会不耐烦。


      还有一种常用的图是网络图,网络图一般用于描述关系强弱或路径分析等,通过网络图可以非常直观的发现数据之间的关联。R中igraph包中的graph()或data.frame.graph()函数实现网络图的绘制。这里仍然以案例的形式展示网络图的绘制:

      #使用gcookbook包中的madmen数据集 library(gcookbook) head(madmen)

      【R画图】使用R绘制其他图形之热图及网络图

      #加载igraph包 library(igraph) opar <- par(no.readonly = TRUE) par(mar = c(0,0,0,0)) #选择layout.fruchterman.reingold布局,绘制有方向的网络图 g <- graph.data.frame(madmen, directed = TRUE) plot(g, layout = layout.fruchterman.reingold, vertex.size = 8, edge.arrow.size = 0.5, vertex.label = NA) par(opar)

      【R画图】使用R绘制其他图形之热图及网络图

      很简单,一幅网络图就绘制好了,通过箭头就可以知道节点与节点之间的方向,也可以看出哪些人物是核心人物。下面用圆形布局绘制网络图:

      opar <- par(no.readonly = TRUE) par(mar = c(0,0,0,0)) #选择layout.circle布局,绘制无方向的网络图 g <- graph.data.frame(madmen, directed = FALSE) plot(g, layout = layout.circle, vertex.size = 8, vertex.label = NA) par(opar)

      【R画图】使用R绘制其他图形之热图及网络图

      上面的两幅网络图能够很清晰的看出哪些节点之间是紧密联系的,哪些节点是核心节点,但这里并没有具体显示这些节点都代表什么含义,下面看看如何为节点添加标签:

      #查看标签内容 V(g)$name

      【R画图】使用R绘制其他图形之热图及网络图

      #绘制带标签的节点 opar <- par(no.readonly = TRUE) par(mar = c(0,0,0,0)) g <- graph.data.frame(madmen, directed = FALSE) plot(g, layout = layout.fruchterman.reingold, vertex.size = 8, vertex.label = V(g)$name, vertex.label.cex = 0.6, vertex.label.dist = 0.5) par(opar)

      【R画图】使用R绘制其他图形之热图及网络图

      这样是不是就非常清爽啦,就能够具体识别到哪些重要的节点了。

      除此,我们还可以在节点与节点之间的连线上做文章,如设置连线的颜色、为某些特殊的连线加上标签、设置标签大小等。

      #绘制带标签的节点 opar <- par(no.readonly = TRUE) par(mar = c(0,0,0,0)) g <- graph.data.frame(madmen, directed = FALSE)

      这里使用另外一种形式来修改连线之间的属性,即E(g)格式:

      #将所有连线设置为黑色 E(g)$color = 'black' #将指定连线设置为红色 E(g)[c(2,8,10)]$color = 'red' #将指定连线的变迁设置为L1,L2,L3 E(g)[c(2,8,10)]$label = c('L1','L2','L3') #设置标签属性和连续属性 plot(g, layout = layout.fruchterman.reingold, vertex.size = 8, vertex.label = V(g)$name, vertex.label.cex = 0.6, vertex.label.color = 'black', vertex.label.dist = 0.5, edge.label.cex = 0.8, edge.label.color = 'blue') par(opar)

      【R画图】使用R绘制其他图形之热图及网络图

      更多关于网络图的绘制可查看igragh包帮助文档,帮助文档中有非常丰富的函数,可以绘制各种布局的网络图等。


      参数资料:

      R数据可视化手册

      刘顺祥,数据分析师,热爱数据分析与挖掘工作,擅长使用R语言,目前自学Python语言。

      严禁修改,可以转载,请注明出自数据人网和原文链接:http://shujuren.org/index.php/Article/update/aid/158


      更多精彩内容,请点击阅读原文。

      数据人网(http://shujuren.org),数据人学习、交流和分享的家园,专注于从数据中学习,努力发觉数据之洞见,积极利用数据之价值。为“让人懂数据、用数据”之使命坚持做点事情。大家可以来投稿,做分享和传播,可以给反馈。您有什么想法,请反馈给我们,谢谢。数据人网,我们共建和共享。

      数据人网构建了数据人圈子,诚邀热爱数据和利用数据朋友入群。加小编微信:luqin360,注明入圈子。


      测试结尾

      请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!

      • 分享:
      作者头像
      weinfoadmin

      上一篇文章

      【分类算法】基于 R 语言决策树算法介绍及应用
      2016年2月16日

      下一篇文章

      【数据整理】如何使用R语言解决可恶的脏数据
      2016年2月18日

      你可能也喜欢

      3-1665801675
      R语言学习:重读《R数据科学(中文版)》书籍
      28 9月, 2022
      6-1652833487
      经典铁死亡,再出新思路
      16 5月, 2022
      1-1651501980
      R语言学习:阅读《R For Everyone 》(第二版)
      1 5月, 2022

      搜索

      分类

      • R语言
      • TCGA数据挖掘
      • 单细胞RNA-seq测序
      • 在线会议直播预告与回放
      • 数据分析那些事儿分类
      • 未分类
      • 生信星球
      • 老俊俊的生信笔记

      投稿培训

      免费

      alphafold2培训

      免费

      群晖配置培训

      免费

      最新博文

      Nature | 单细胞技术揭示衰老细胞与肌肉再生
      301月2023
      lncRNA和miRNA生信分析系列讲座免费视频课和课件资源包,干货满满
      301月2023
      如何快速批量修改 Git 提交记录中的用户信息
      261月2023
      logo-eduma-the-best-lms-wordpress-theme

      (00) 123 456 789

      weinfoadmin@weinformatics.cn

      恒诺新知

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      链接

      • 课程
      • 事件
      • 展示
      • 问答

      支持

      • 文档
      • 论坛
      • 语言包
      • 发行状态

      推荐

      • iHub汉语代码托管
      • iLAB耗材管理
      • WooCommerce
      • 丁香园论坛

      weinformatics 即 恒诺新知。ICP备案号:粤ICP备19129767号

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      要成为一名讲师吗?

      加入数以千计的演讲者获得100%课时费!

      现在开始

      用你的站点账户登录

      忘记密码?

      还不是会员? 现在注册

      注册新帐户

      已经拥有注册账户? 现在登录

      close
      会员购买 你还没有登录,请先登录
      • ¥99 VIP-1个月
      • ¥199 VIP-半年
      • ¥299 VIP-1年
      在线支付 激活码

      立即支付
      支付宝
      微信支付
      请使用 支付宝 或 微信 扫码支付
      登录
      注册|忘记密码?