• 主页
  • 课程

    关于课程

    • 课程归档
    • 成为一名讲师
    • 讲师信息
    教学以及管理操作教程

    教学以及管理操作教程

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

      关于课程

      • 课程归档
      • 成为一名讲师
      • 讲师信息
      教学以及管理操作教程

      教学以及管理操作教程

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

      R语言

      • 首页
      • 博客
      • R语言
      • 【R画图】手把手教你使用ggplot2绘制折线图

      【R画图】手把手教你使用ggplot2绘制折线图

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

      折线图同样是应用非常广泛的统计图之一,通过折线图可以反映某种现象的趋势。通常折线图的横坐标是为时间变量,纵坐标则是一般性的数值型变量,当然,折线图也允许横坐标为离散型数值和数值型数值。下面来解释一下关于折线图的绘制。

      一、绘制单条折线图


      library(ggplot2) #有关时间序列的折线图 library(lubridate)    #处理日期时间相关的R包,非常有用,强烈推荐 Year <- year(seq(from = as.Date('2006-01-01'), to = as.Date('2015-01-01'), by = 'year')) Weight <- c(23,35,43,57,60,62,63,66,61,62) df <- data.frame(Year = Year, Weight = Weight)  ggplot(data = df, mapping = aes(x = factor(Year), y = Weight, group = 1)) + geom_line() + xlab('Year')
      【R画图】手把手教你使用ggplot2绘制折线图 
      #有关离散变量的折线图 type <- c('A','B','C','D','E') quanlity <- c(1,1.1,2.1,1.5,1.7) df <- data.frame(type = type, quanlity = quanlity)  ggplot(data = df, mapping = aes(x = type, y = quanlity, group = 1)) + geom_line()

      【R画图】手把手教你使用ggplot2绘制折线图

      #有关连续变量的折线图 set.seed(1234) times <- 1:15 value <- runif(15,min = 5,max = 15) df <- data.frame(times = times, value = value)  ggplot(data = df, mapping = aes(x = times, y = value)) + geom_line()

      【R画图】手把手教你使用ggplot2绘制折线图

      善于发现的你,可能会注意到上面三段代码有一个重要的不同之处,那就是第一段和第二段代码中含有‘group = 1’的设置。这样做是因为横坐标的属性设置为了因子,即将连续型的年份和离散型的字符转换为因子,如果不添加‘group = 1’这样的条件,绘图将会报错。故务必需要记住这里的易犯错误的点!
      往折线图中添加标记(点) 当数据点密度比较小或采集分布(间隔)不均匀时,为折线图做上标记将会产生非常好的效果。处理的方法非常简单,只需在折线图的基础上再加上geom_point()函数即可。
      set.seed(1234) year <- c(1990,1995,2000,2003,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015) value <- runif(15, min = 10, max = 50) df <- data.frame(year = year, value = vlaue)  ggplot(data = df, mapping = aes(x = year, y = value)) + geom_line() + geom_point()

      【R画图】手把手教你使用ggplot2绘制折线图

      从图中就可以非常明显的看出,刚开始采集的点分布非常散,而后面采集的点就比较密集,这也有助于对图的理解和应用。
      二、绘制多条折线图 上面绘制的都是单条这折线图,对于两个或两个以上的折线图该如何绘制呢?也很简单,只需将其他离散变量赋给诸如colour(线条颜色)和linetype(线条形状)的属性即可,具体参见下文例子。
      #基于颜色的多条折线图 set.seed(1234) year <- rep(1990:2015, times = 2) type <- rep(c('A','B'),each = 26) value <- c(runif(26),runif(26, min = 1,max = 1.5)) df <- data.frame(year = year, type = type, value = value)  ggplot(data = df, mapping = aes(x = year, y = value, colour = type)) + geom_line()

      【R画图】手把手教你使用ggplot2绘制折线图

      #基于形状的多条折线图 ggplot(data = df, mapping = aes(x = year, y = value, linetype = type)) + geom_line()

      【R画图】手把手教你使用ggplot2绘制折线图

      同样需要注意的是,在绘制多条折线图时,如果横坐标为因子,必须还得加上‘group=分组变量’的参数,否则报错或绘制出错误的图形。

      以上绘制的折线图,均采用默认格式,不论是颜色、形状、大小还是透明度,均没有给出自定义的格式。其实ggplot2包也是允许用户根据自己的想法设置这些属性的。
      #自定义线条或点的颜色–scale_color_manual()
      #自定义线条类型–scale_linetype_manual()
      #自定义点的形状–scale_shape__manual()
      #自定义点的大小或线条的宽度–scale_size__manual()
      #自定义透明度–scale_alpha__manual()
      综合的例子:

      ggplot(data = df, mapping = aes(x = year, y = value, linetype = type, colour = type, shape = type, fill = type)) + geom_line() + geom_point()+ scale_linetype_manual(values = c(1,2)) + scale_color_manual(values = c('steelblue','darkred')) + scale_shape_manual(values = c(21,23)) + scale_fill_manual(values = c('red','black'))

      【R画图】手把手教你使用ggplot2绘制折线图


      虽然这幅图画的优点夸张,目的是想说明可以通过自定义的方式,想怎么改就可以怎么改。前提是aes()属性的内容与自定义的内容对应上。

      三、绘制堆积面积图
      绘制堆叠的面积图只需要geom_area()函数再加上一个离散变量映射到fill就可以轻松实现,先忙咱小试牛刀一下。

      set.seed(1234) year <- rep(1990:2015, times = 2) type <- rep(c('A','B'),each = 26) value <- c(runif(26),runif(26, min = 1,max = 1.5)) df <- data.frame(year = year, type = type, value = value)  ggplot(data = df, mapping = aes(x = year, y = value, fill = type)) + geom_area()

      【R画图】手把手教你使用ggplot2绘制折线图


      一幅堆叠的面积图就轻松绘制成功,但我们发现,堆叠的顺序与图例的顺序恰好相反,不用急,只需要加一句命令即可:


      ggplot(data = df, mapping = aes(x = year, y = value, fill = type)) + geom_area() + guides(fill = guide_legend(reverse = TRUE))

      【R画图】手把手教你使用ggplot2绘制折线图


      如果需要为每一块面积图的顶部加上一条直线,可以通过如下两种方式:


      ggplot(data = df, mapping = aes(x = year, y = value, fill = type)) + geom_area(colour = 'black', size =1, alpha = .7) + guides(fill = guide_legend(reverse = TRUE))

      【R画图】手把手教你使用ggplot2绘制折线图


      其中,colour设置面积图边框的颜色;size设置边框线的粗细;alpha设置面积图和边框线的透明度。


      ggplot(data = df, mapping = aes(x = year, y = value, fill = type)) + geom_area(alpha = 0.6) + geom_line(colour = 'black', size = 1, position = 'stack', alpha = 0.6) + guides(fill = guide_legend(reverse = TRUE))


      【R画图】手把手教你使用ggplot2绘制折线图

      该方法是通过添加堆叠线条(必须设置geom_line()中position参数为‘stack’,否则只是添加了两条线,无法与面积图的顶部重合)。这两幅图的区别在于第二种方式没有绘制面积图左右边框和底边框。在实际应用中,建议不要在面积图中绘制边框线,因为边框的存在可能产生误导。

      四、绘制百分比堆积面积图
      在面积图中,也可以方便快捷的绘制出百分比堆积面积图,具体操作如下:

      set.seed(1234) year <- rep(1990:2015, times = 4) type <- rep(c('A','B','C','D'),each = 26) value <- c(runif(26),runif(26, min = 1,max = 1.5), runif(26, min = 1.5,max = 2), runif(26, min = 2,max = 2.5)) df <- data.frame(year = year, type = type, value = value)  ggplot(data = df, mapping = aes(x = year, y = value, fill = type)) + geom_area(position = 'fill', alpha = 0.6) + guides(fill = guide_legend(reverse = TRUE))

      【R画图】手把手教你使用ggplot2绘制折线图


      但通过这种方式((设置面积图的positon='fill')存在一点点小缺陷,即无法绘制出百分比堆积面积图顶部的线条,该如何实现呢?这里只需要对原始数据集做一步汇总工作,让后按部就班的绘制面积图即可。


      library(dplyr) df_by_type <- group_by(.data = df, year) df_summarize <- mutate(.data = df_by_type, value2 = value/sum(value))


      ggplot(data = df_summarize, mapping = aes(x = year, y = value2, fill = type)) + geom_area(alpha = 0.6) + geom_line(colour = 'black', size = 1, position = 'stack', alpha = 0.6) + guides(fill = guide_legend(reverse = TRUE))

      【R画图】手把手教你使用ggplot2绘制折线图


      哈哈,大功告成,就这么简单。

      参考资料:
      R语言_ggplot2:数据分析与图形艺术
      R数据可视化手册

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

      本文由作者刘顺祥授权数据人网发表,并经数据人网审核。转载此文章需经作者同意,并请附上出处(数据人网)及本页链接:http://shujuren.org/index.php/Article/update/aid/126

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

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

      公众号推荐

      数据科学自媒体,从数据里面学习。

      长按二维码图片,选择识别二维码图片,添加即可。

      【R画图】手把手教你使用ggplot2绘制折线图


      测试结尾

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

      • 分享:
      作者头像
      weinfoadmin

      上一篇文章

      【R画图】手把手教你使用ggplot2绘制条形图
      2016年1月17日

      下一篇文章

      【算法总结】10+数据挖掘、机器 学习算法R常用函数总结(上)
      2016年1月19日

      你可能也喜欢

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

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