• 主页
  • 课程

    关于课程

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

    同等学历教学

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

      关于课程

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

      同等学历教学

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

      未分类

      • 首页
      • 博客
      • 未分类
      • R语言画好看的散点图

      R语言画好看的散点图

      • 发布者 weinfoadmin
      • 分类 未分类
      • 日期 2021年9月9日
      • 评论 0评论

      专题介绍:R是一种广泛用于数据分析和统计计算的强大语言,于上世纪90年代开始发展起来。得益于全世界众多 爱好者的无尽努力,大家继而开发出了一种基于R但优于R基本文本编辑器的R Studio(用户的界面体验更好)。也正是由于全世界越来越多的数据科学社区和用户对R包的慷慨贡献,让R语言在全球范围内越来越流行。其中一些R包,例如MASS,SparkR, ggplot2,使数据操作,可视化和计算功能越来越强大。R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。R作为一种统计分析软件,是集统计分析与图形显示于一体的。它可以运行于UNIX、Windows和Macintosh的操作系统上,而且嵌入了一个非常方便实用的帮助系统,相比于其他统计分析软件,R的学术性开发比较早,适合生物学和医学等学术学科的科研人员使用。





      这是我的第52篇原创文章,关于数据可视化分析。

      阅读完文本,你可以知道:

      1散点图的用途

      2使用graphics包画出好看的散点图

      3使用export包导出高质量的散点图


      “人类的使命,在于自强不息地追求完美。”—托尔斯泰





      0
      前言

      散点图(scatter plot)是一种常用的数据可视化图形。它用来观察两个连续性变量之间或者两两连续性变量之间(散点图矩阵)的关系。通过散点图,可以探索和发现变量之间是否有关系以及何种关系?比方说,是线性的,还是非线性;是强相关的,还是弱相关的;是正相关的,还是负相关等。


      1
      graphics包画好看的散点图

      0 准备工作

      0.1 加载R包


      代码片段

      # 加载所需R包
      library(pacman)
      p_load(tidyverse)
      p_load(export)

      0.2 加载示例数据和数据检视


      代码片段

      # 加载数据集
      mydata <- read_csv('./data/mydata.csv')
      mydata %>% head
      mydata %>% glimpse



      1 画好看的散点图

      1.1 探索Height与Weight的关系


      代码片段

      # 探索Height与Weight变量的关系
      mydata %>% select(Weight, Height) %>% plot()


      1.2 美化散点图

      散点图的美化,可以考虑这些因素。

      • 添加x轴和y轴的标签

      • 设置x轴和y轴的范围

      • 添加标题和设置标题的字体大小

      • 去掉图像框架

      • 设置点的形状和颜色

      等等


      代码片段

      # 散点图的美化工作
      # 添加x和y轴的labels
      # 修改x和y轴的范围
      # 添加标题和设置标题字体的尺寸大小
      # 去掉图像的框架
      # 设置点的颜色和形状
      mydata %>% 
        select(Weight, Height) %>% 
        plot(
          xlab = "Weight (lbs)",
          ylab = "Height (inches)",
          xlim = c(80, 200),
          ylim = c(55, 75),
          main="Height vs Weight", 
          pch=2, 
          cex.main=1.5, 
          frame.plot=FALSE , 
          col="blue"
        )


      1.3 根据Sex变量的值来设置散点的颜色和添加图例


      代码片段

      # 点的颜色控制使用数据的变量sex来控制
      # 利用ifelse函数
      mydata %>% 
        select(Weight, Height) %>% 
        plot(
          xlab = "Weight (lbs)",
          ylab = "Height (inches)",
          xlim = c(80, 200),
          ylim = c(55, 75),
          main="Height vs Weight", 
          pch=2, 
          cex.main=1.5, 
          frame.plot=FALSE , 
          col=ifelse(mydata$Sex == 1, "red", "blue")
        )
      # 添加图例
      legend(80, 75, 
             pch = c(2, 2), 
             col = c("red", "blue"), 
             c("Male", "Female"), 
             bty="o",  
             box.col="darkgreen", 
             cex=.8)


      1.4 两个散点图组合

      同时,给图一添加垂直的均值曲线;图二添加线性回归拟合曲线


      代码片段

      par(mfrow=c(1,2))
      mydata %>% 
        select(Weight, Height) %>% 
        plot(
          xlab = "Weight (lbs)",
          ylab = "Height (inches)",
          xlim = c(80, 200),
          ylim = c(55, 75),
          main="Height vs Weight", 
          pch=2, 
          cex.main=1.5, 
          frame.plot=FALSE , 
          col="blue"
        )
      # 添加体重平均曲线
      abline(v = mean(mydata$Weight, na.rm = TRUE), col="orange")
      text(140,73, cex=.8, pos=4, "Orange line isn sample averagen weight")

      mydata %>% 
        select(Age, Height) %>% 
        plot(
          xlab = "Age (years)",
          ylab = "Height (inches)",
          xlim = c(0, 80),
          ylim = c(55, 75),
          main="Height vs Age", 
          pch=3, 
          cex.main=1.5, 
          frame.plot=FALSE , 
          col="darkred"
        )
      # 添加线性回归拟合曲线
      reg <- lm(Height~Age, data=mydata)
      abline(reg)
      text(0,72, 
           paste0("Height ~ ", round(reg$coef[1],2), "+", round(reg$coef[2],2), "*Age"), 
           pos=4, 
           cex=.8)



      2
      export包导出高质量的图形

      我们使用export包可以便捷地导出高质量的图形,支持PDF格式,PGN格式,TIFF格式等。

      以PNG格式图像为例


      参考代码

      plot_fun <- function() {
        par(mfrow=c(1,2))
        mydata %>% 
          select(Weight, Height) %>% 
          plot(
            xlab = "Weight (lbs)",
            ylab = "Height (inches)",
            xlim = c(80, 200),
            ylim = c(55, 75),
            main="Height vs Weight", 
            pch=2, 
            cex.main=1.5, 
            frame.plot=FALSE , 
            col="blue"
          )
        # 添加体重平均曲线
        abline(v = mean(mydata$Weight, na.rm = TRUE), col="orange")
        text(140,73, cex=.8, pos=4, "Orange line isn sample averagen weight")

        mydata %>% 
          select(Age, Height) %>% 
          plot(
            xlab = "Age (years)",
            ylab = "Height (inches)",
            xlim = c(0, 80),
            ylim = c(55, 75),
            main="Height vs Age", 
            pch=3, 
            cex.main=1.5, 
            frame.plot=FALSE , 
            col="darkred"
          )
        # 添加线性回归拟合曲线
        reg <- lm(Height~Age, data=mydata)
        abline(reg)
        text(0,72, 
             paste0("Height ~ ", round(reg$coef[1],2), "+", round(reg$coef[2],2), "*Age"), 
             pos=4, 
             cex=.8)
      }
      # 导出PNG格式
      graph2png(file='scatter_plot0201.png', fun=plot_fun, dpi=400, height = 5, aspectr=4)


      附录:

      完整的参考代码

      ###################
      #R语言与散点图
      #王路情
      #2020-02-01
      ##################

      # R包
      library(pacman)
      p_load(tidyverse)
      p_load(export)

      # 加载数据集
      mydata <- read_csv('./data/mydata.csv')
      mydata %>% head
      mydata %>% glimpse


      # 多个连续变量的可视化
      mydata %>% select(Age, Weight, Height) %>% plot()
      par(mfrow=c(1,1))
      # 探索Height与Weight变量的关系
      mydata %>% select(Weight, Height) %>% plot()

      # 散点图的美化工作
      # 添加x和y轴的labels
      # 修改x和y轴的范围
      # 添加标题和设置标题字体的尺寸大小
      # 去掉图像的框架
      # 设置点的颜色和形状
      mydata %>% 
        select(Weight, Height) %>% 
        plot(
          xlab = "Weight (lbs)",
          ylab = "Height (inches)",
          xlim = c(80, 200),
          ylim = c(55, 75),
          main="Height vs Weight", 
          pch=2, 
          cex.main=1.5, 
          frame.plot=FALSE , 
          col="blue"
        )

      # 进一步完善
      # 点的颜色控制使用数据的变量sex来控制
      # 利用ifelse函数
      mydata %>% 
        select(Weight, Height) %>% 
        plot(
          xlab = "Weight (lbs)",
          ylab = "Height (inches)",
          xlim = c(80, 200),
          ylim = c(55, 75),
          main="Height vs Weight", 
          pch=2, 
          cex.main=1.5, 
          frame.plot=FALSE , 
          col=ifelse(mydata$Sex == 1, "red", "blue")
        )
      mydata %>% View


      # 点的颜色控制使用数据的变量sex来控制
      # 利用ifelse函数
      mydata %>% 
        select(Weight, Height) %>% 
        plot(
          xlab = "Weight (lbs)",
          ylab = "Height (inches)",
          xlim = c(80, 200),
          ylim = c(55, 75),
          main="Height vs Weight", 
          pch=2, 
          cex.main=1.5, 
          frame.plot=FALSE , 
          col=ifelse(mydata$Sex == 1, "red", "blue")
        )
      # 添加图例
      legend(80, 75, 
             pch = c(2, 2), 
             col = c("red", "blue"), 
             c("Male", "Female"), 
             bty="o",  
             box.col="darkgreen", 
             cex=.8)

      # 或者
      # 直接指定legend的具体位置
      mydata %>% 
        select(Weight, Height) %>% 
        plot(
          xlab = "Weight (lbs)",
          ylab = "Height (inches)",
          xlim = c(80, 200),
          ylim = c(55, 75),
          main="Height vs Weight", 
          pch=2, 
          cex.main=1.5, 
          frame.plot=FALSE , 
          col=ifelse(mydata$Sex == 1, "red", "blue")
        )
      legend("topleft", 
             pch = c(2, 2), 
             col = c("red", "blue"), 
             c("Male", "Female"), 
             bty="o",  
             box.col="darkgreen", 
             cex=.8)

      # 2个散点图组合
      # 每个散点图添加曲线
      par(mfrow=c(1,2))
      mydata %>% 
        select(Weight, Height) %>% 
        plot(
          xlab = "Weight (lbs)",
          ylab = "Height (inches)",
          xlim = c(80, 200),
          ylim = c(55, 75),
          main="Height vs Weight", 
          pch=2, 
          cex.main=1.5, 
          frame.plot=FALSE , 
          col="blue"
        )
      # 添加体重平均曲线
      abline(v = mean(mydata$Weight, na.rm = TRUE), col="orange")
      text(140,73, cex=.8, pos=4, "Orange line isn sample averagen weight")

      mydata %>% 
        select(Age, Height) %>% 
        plot(
          xlab = "Age (years)",
          ylab = "Height (inches)",
          xlim = c(0, 80),
          ylim = c(55, 75),
          main="Height vs Age", 
          pch=3, 
          cex.main=1.5, 
          frame.plot=FALSE , 
          col="darkred"
        )
      # 添加线性回归拟合曲线
      reg <- lm(Height~Age, data=mydata)
      abline(reg)
      text(0,72, 
           paste0("Height ~ ", round(reg$coef[1],2), "+", round(reg$coef[2],2), "*Age"), 
           pos=4, 
           cex=.8)

      # # 散点图保存为PDF格式
      # pdf('plot3.pdf', width = 4, height = 4)
      # 
      # # 图形保存
      # invisible(dev.off())

      plot_fun <- function() {
        par(mfrow=c(1,2))
        mydata %>% 
          select(Weight, Height) %>% 
          plot(
            xlab = "Weight (lbs)",
            ylab = "Height (inches)",
            xlim = c(80, 200),
            ylim = c(55, 75),
            main="Height vs Weight", 
            pch=2, 
            cex.main=1.5, 
            frame.plot=FALSE , 
            col="blue"
          )
        # 添加体重平均曲线
        abline(v = mean(mydata$Weight, na.rm = TRUE), col="orange")
        text(140,73, cex=.8, pos=4, "Orange line isn sample averagen weight")

        mydata %>% 
          select(Age, Height) %>% 
          plot(
            xlab = "Age (years)",
            ylab = "Height (inches)",
            xlim = c(0, 80),
            ylim = c(55, 75),
            main="Height vs Age", 
            pch=3, 
            cex.main=1.5, 
            frame.plot=FALSE , 
            col="darkred"
          )
        # 添加线性回归拟合曲线
        reg <- lm(Height~Age, data=mydata)
        abline(reg)
        text(0,72, 
             paste0("Height ~ ", round(reg$coef[1],2), "+", round(reg$coef[2],2), "*Age"), 
             pos=4, 
             cex=.8)
      }

      graph2png(file='scatter_plot0201.png', fun=plot_fun, dpi=400, height = 5, aspectr=4)


      关于R语言画好看的散点图,您有什么想法请留言。


      需要深入交流和沟通,请加我的微信:luqin360。备注:实名+工作或者专业,否则不会通过。


      数据思考与践行


      数据可视化分析系列文章

      1ggpubr包:生成可出版的图形

      2数据可视化分析

      3R语言做数据可视化分析

      4Python语言和matplotlib库做数据可视化分析

      你点的每个在看,我都认真当成了喜欢

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

      • 分享:
      作者头像
      weinfoadmin

      上一篇文章

      PDFMV框架的P
      2021年9月9日

      下一篇文章

      R语言本地化安装github上的包
      2021年9月9日

      你可能也喜欢

      2-1675088548
      lncRNA和miRNA生信分析系列讲座免费视频课和课件资源包,干货满满
      30 1月, 2023
      9-1675131201
      如何快速批量修改 Git 提交记录中的用户信息
      26 1月, 2023
      8-1678501786
      肿瘤细胞通过改变CD8+ T细胞中的丙酮酸利用和琥珀酸信号来调控抗肿瘤免疫应答。
      7 12月, 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年
      在线支付 激活码

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