• 主页
  • 课程

    关于课程

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

    同等学历教学

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

      关于课程

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

      同等学历教学

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

      R语言

      • 首页
      • 博客
      • R语言
      • R语言数据可视化|ggplot2包

      R语言数据可视化|ggplot2包

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

      ggplot2是R语言最为强大的作图软件包,有着自成一派的可视化理念,数据可视化是数据分析的重要一步,让我们通过由浅入深的掌握数据可视化的精髓。

      展开一张画布

      ggplot2和其他作图工具不同,它是以图层覆盖图层的方式画出一个完美图像的,就像是photoshop里的图层,那么首先我们得有一张画布(如果没有安装R语言和ggplot2请见《 十八-R语言特征工程实战 》)

      > library(ggplot2) > ggplot()

      R语言数据可视化|ggplot2包

      使用geom_abline、geom_hline、geom_vline画直线

      下面我们来在这张画布上画一条横线:

      > ggplot() + geom_hline(yintercept = 5)

      R语言数据可视化|ggplot2包

      我们也可以画一条竖线

      > ggplot() + geom_vline(xintercept = 5)

      R语言数据可视化|ggplot2包

      当然我们也可以画斜线,

      > geom_abline(intercept = 2.5, slope=1)

      本应该画一条斜率为1,截距为2.5的斜线,但是因为画布不会自动移动到这条直线所在的位置,所以我们要实现几个点来定位一下画布,那么怎么画点呢,我们先来研究一下

      使用geom_point画点

      下面我们来一张空画布上画一个点,画点和画线不同在于:线可以指定一个x或y的截距就可以了,可以作为一个简单的参数传给geom_hline或geom_vline,但是画点涉及到的是一些x、y的数据值,ggplot是把数据和作图撇清的,也就是数据是数据,成像是成像

      我们先来构造点:

      > x <- c(1,2,3) > y <- c(1,3,4) > data <- data.frame(x,y) > str(data) 'data.frame':      3 obs. of  2 variables:  $ x: num  1 2 3  $ y: num  1 3 4

      我们其实构建了一个frame,里面包含了三个点:(1,1), (2,3), (3,4)

      那么如果要画出这些点的话应该这样:

      > ggplot(data, aes(x = x, y = y)) + geom_point()

      R语言数据可视化|ggplot2包

      前面是声明数据部分,后面是声明怎么成像

      下面我们开始调整geom_point的参数,比如展示不同的颜色(左),和展示不同的形状(右)

      > ggplot(data, aes(x, y)) + geom_point(aes(colour = factor(y))) > ggplot(data, aes(x, y)) + geom_point(aes(shape = factor(y)))

      R语言数据可视化|ggplot2包

      如果颜色不是按factor区分,而是按连续值来区分,那么就是渐变形式,即

      > ggplot(data, aes(x, y)) + geom_point(aes(colour = y))

      R语言数据可视化|ggplot2包

      还可以展示不同的大小,可以固定大小(左),也可以根据数据确定大小(右)

      > ggplot(data, aes(x, y)) + geom_point(aes(size = 3)) > ggplot(data, aes(x, y)) + geom_point(aes(size = y))

      R语言数据可视化|ggplot2包

      这里我们要说明一下aes的作用,看下面两个用法(如图左、右):左边的含义就是画红色点,右边是按照指定的一个维度展示不同的颜色

      > ggplot(data, aes(x, y)) + geom_point(colour="red") > ggplot(data, aes(x, y)) + geom_point(aes(colour="red"))

      R语言数据可视化|ggplot2包

      接着上面划线一节,我们在已经画了点的画布上再画一条斜线:一条斜率为1,截距为1的直线,也就是y=x+1,那么一定是经过(2,3),(3,4)两个点的

      > ggplot(data, aes(x, y)) + geom_point(aes(colour = y)) + geom_abline(slope = 1, intercept = 1)

      R语言数据可视化|ggplot2包

      使用geom_bar来画直方图

      直观上看,直方图是表达一种累积量,因此默认的直方图的高度是counts或sum,也就是像下面这样子:因为我们的x只有1、2、3单独的三个值,所以直接geom_bar()高度相同,但如果判断x<2,那么有一个满足,两个不满足,所以高度分别是1和2

      > ggplot(data, aes(x)) + geom_bar() > ggplot(data, aes(x<2)) + geom_bar()

      R语言数据可视化|ggplot2包

      当然我们可以自己指定直方图的高度的计算方法,以下两种方法效果相同

      > ggplot(data, aes(x)) + geom_bar(aes(weight=y)) > ggplot(data, aes(x,y)) + geom_bar(stat = "identity")

      R语言数据可视化|ggplot2包

      如果我们想要把多种取值的统计数目累加显示在柱状图上,可以这样:这里面对同一个x,不同y出现总数不一样,累加起来就像下图展示,其中如果y是数字,那么想把他当成类别,需要转成factor

      > x <- rep(c(1,2), c(2,3)) > y <- rep(c(3,2), c(1,4)) > data <- data.frame(x,y) > ggplot(data, aes(x)) + geom_bar(aes(fill=factor(y)))

      R语言数据可视化|ggplot2包

      当然我们也可以不简单堆叠起来,比如扁平放置(左),或拉伸至顶部(右)

      > ggplot(data, aes(x)) + geom_bar(aes(fill=factor(y)), position="dodge") > ggplot(data, aes(x)) + geom_bar(aes(fill=factor(y)), position="fill")

      R语言数据可视化|ggplot2包

      利用geom_density画概率密度曲线

      概率密度就是某些值出现的频次多少的一个曲线,并做平滑,如下:

      > x <- rep(c(1,3,7,11,23,50,60),c(1,30,400,60,4,55,11)) > y <- rep(c(1,3,7,11,23,50,60),c(1,30,400,60,4,55,11)) > data <- data.frame(x,y) > ggplot(data, aes(x)) + geom_density()

      R语言数据可视化|ggplot2包

      我们可以调整平滑的宽度:

      > ggplot(data, aes(x)) + geom_density(adjust = 1/5)

      R语言数据可视化|ggplot2包

      如果我们想按照不同的y值来分开画密度图,并且用不同颜色来表示不同的y值,那么我们可以用描边的方式(左),也可以用填充的方式(中),当然也可以两者结合

      > ggplot(data, aes(x, colour = factor(y))) + geom_density(adjust = 1/5) > ggplot(data, aes(x, fill = factor(y))) + geom_density(adjust = 1/5) > ggplot(data, aes(x, colour = factor(y), fill = factor(y))) + geom_density(adjust = 1/5, alpha = 0.1)

      R语言数据可视化|ggplot2包

      和柱状图一样,我们也可以通过geom_density的position参数来显示累计情况:

      > ggplot(data, aes(x, fill = factor(y))) + geom_density(adjust = 1/5, position='fill') > ggplot(data, aes(x, fill = factor(y))) + geom_density(adjust = 1/5, position='stack')

      R语言数据可视化|ggplot2包

      用geom_text和geom_label写标注文本

      为了让图像更清晰,我们需要把关键数据打上标签展示出来,我们可以这样做:

      > ggplot(data, aes(x, y, label=rownames(data))) + geom_point(aes(colour = y)) + geom_abline(slope = 1, intercept = 1) + geom_text(check_overlap = TRUE) > ggplot(data, aes(x, y, label=rownames(data))) + geom_point(aes(colour = y)) + geom_abline(slope = 1, intercept = 1) + geom_label()

      R语言数据可视化|ggplot2包

      总结

      本节介绍了ggplot作图原理以及基本的几种作图方式,基于这些知识相信你很容易能做出精美的图像了

      选摘:www.shareditor.com




      R语言公众号是数据人网http://shujuren.org运营的公众号。数据人网是数据人学习、交流和分享的平台。点击【阅读原文】,进入【数据人网】,学习、分享和传播数据知识。

      我们都是数据人,我们致力于从数据中学习,努力发觉数据之洞见,积极利用数据之价值!




      测试结尾

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

      • 分享:
      作者头像
      weinfoadmin

      上一篇文章

      R in 24 Hours, Sams Teach Yourself|R书籍
      2016年11月9日

      下一篇文章

      电商评论情感分析
      2016年11月11日

      你可能也喜欢

      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年
      在线支付 激活码

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