R语言学习实战——解决边际分布图

目录

 

0 R语言概述

1 本次实战简介

2 涉及的工具包

2.1 ggplot2简介

2.2 ggExtra简介

2.3 ggpointdensity简介

3 开始画图

3.1 安装并载入

3.2 导入数据

3.3 二维散点核密度图

3.4 修改横纵坐标轴和坐标轴名称

3.4.1 不想要的部分:XXX=“none”

3.4.2 修改背景(包括坐标轴)

4.绘制边际图形


0 R语言概述

        R是用于统计分析绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。重点是:画图Nice!没有找到对手!就算有对手也没用,对于科研党来说R语言用的还是多一些(反正本人看到的文献还是R语言画图多一点)。

       所以博主立志尽快把R语言语法,特别是绘图方面融会贯通,因此博客内容分成两大部分:(1)R语言学习(将会以从浅至深的顺序梳理、摘抄R语言相关知识);(2)R语言绘图实战(时间紧迫,别人的图太美急需学习)

关于R语言概述的内容以及软件安装和界面调试参考以下博文:

项目链接
R语言介绍R语言是什么?
软件安装R和Rstudio 安装教程
软件安装(Windows)Windows下安装和编译
R语言入门R语言入门教程-敲着试一试
R语言基本统计分析基本统计分析
R Studio界面(windows)windows界面讲解
R Studio界面设置界面设置(如何更加美观)

 

 

1 本次实战简介

我们在论文中找到如此炫酷的一张图(Mutch et al., 2019),要进行分析是如何制作的:

我们来看这张图,主要有以下几个方面:(1)六边形散点(且越聚集颜色越深,为一维核密度分布,而且颜色是有透明度的)(2)横纵坐标轴文字以及坐标轴刻度(其中横坐标两个刻度一个数字)(3)左上角文字标“D”,右边文字描述,而且还有“+”、“-”的符号(4)边际直方图分布

那么我们的代码也应该从这四个方面分别入手,以求得最好看的图片。

注意:R语言绘图有句话“所见即所得”,所以我们画图的时候不着急一下子都画出来,只要把每个部分累加就行。所以该图可以理解为:散点+(横纵坐标轴+坐标轴名称)+角标文字+边际直方图。

2 涉及的工具包

首先解决下载问题,R语言使用我们都下载两个东西:R和R Studio,一个是语言环境,一个是IDE(我是这么理解的)。

附:R语言常用工具包及介绍。

  1. 常用工具包分类
  2. 常用包

2.1 ggplot2简介

一个绘图的R包,让人欲罢不能,纵使秃头白发也难舍弃,秒杀科研论文的工具包。详细内容见ggplot2详细讲解

2.2 ggExtra简介

这个工具包介绍很少很少,甚至连成文的材料都没有,……但是它的功能很明确!ggExtra:绘制图形的边界直方图。

2.3 ggpointdensity简介

这个就更加“小”了,但是却很常用,用来绘制密度散点图。R语言绘制密度散点图

3 开始画图

3.1 安装并载入

#以上内容分开输入 不要着急
install.packages("ggplot2")
install.packages("ggExtra")
install.packages("ggpointdensity")
library(ggplot2)
library(ggExtra)
library(ggpointdensity)

3.2 导入数据

点击Import Dataset 注意修改变量名称和数据格式。

3.3 二维散点核密度图

接着我们开始绘制散点核密度图(这里以R语言自带的数据集iris为例)

p<- ggplot(data =iris,mapping = aes(x =Sepal.Length,y = Sepal.Width))+geom_pointdensity()
#将iris替换成自己的data.frame数据集,aes()函数里x,y=自己的X与Y变量名称

那么我们掌握了如何绘制散点核密度图,接下来思考的是如何绘制成更加好看的六边形散点核密度图,遗憾的是,绘制六边形散点图需要一个R包(hexin),本人尝试了多种方法都没有成功,因此附上相关教程:R语言绘图教程(含六边形散点图绘制)

3.4 修改横纵坐标轴和坐标轴名称

在R语言ggplot2里,修改背景、横纵坐标轴统统归theme()函数来管。有一个博文讲的很明白,在此引用:ggplot2 theme函数

结合以上内容,我们来举几个例子。

3.4.1 不想要的部分:XXX=“none”

比如我们不想要图例 那就legend.position="none";

此处注意,我们之前说过R语言绘图就是不断地加起来那么就要让:原来的图P=P+一个变化

p<-p+theme(legend.position="none")

3.4.2 修改背景(包括坐标轴)

新版本的R可以用一个最简单的办法:theme_classic()  但是很多时候有bug,所以不好实现。

那么我们逐项修改:

  1. 将背景删去,同样删去网格线
    p<-p+theme(panel.grid.major = element_blank(),panel.grid.minor=element_blank(),panel.border = element_blank(), panel.background = element_blank())

     

  2. 添加坐标轴的实线
    pt<-pt+theme(axis.line.x = element_line(color = "black"), axis.line.y = element_line(color = "black"))

  3. 修改坐标轴极值和间距

    p<-p+scale_y_continuous(breaks=seq(2,4.5,1))+scale_x_continuous(breaks=seq(0,8,2))
    #修改成适合自己的坐标轴范围,其中第一个是最小值,第二个是最大值,第三个是间距
  4. 添加文字(包括坐标轴名称) 

默认坐标轴名称是变量的名称,如果我们要修改的话,则修改刻度标签

p<-p+xlab("this is xlab")+ ylab("this is ylab")

此外,我们想要添加文本注释,就就使用geom_text()函数:(引用自绘制文本,注释和主题

geom_text(mapping = NULL, data = NULL, stat = "identity",
  position = "identity", ..., parse = FALSE, nudge_x = 0, nudge_y = 0,
  check_overlap = FALSE, na.rm = FALSE, show.legend = NA,
  inherit.aes = TRUE)

参数注释:

  • mapping:映射,使用aes()设置映射
  • stat:统计转换
  • position:位置调整
  • check_overlap:默认值是 FALSE,如果是TRUE,新增的文本不会覆盖同一图层中的先前文本。
  • parse:默认值是FALSE,不对文本内容进行解析。
  • show.legend:是否显示该文本图层的图例(legend)
  • nudge_x,nudge_y:把文本做小幅移动的距离

geom_text()可以识别的aes参数:

  • x
  • y
  • label:显示的文本
  • alpha:文本重叠部分的透明度
  • angle:文本旋转的角度
  • colour:文本的前景色
  • family:字体名称
  • fontface:字体类型,有效值是:"plain", "bold", "italic", "bold.italic"
  • group:分组
  • hjust、vjust:文本的水平和垂直调整距离,取值范围是0-1,0代表right/bottom,1代表left/top。
  • lineheight:
  • size:字体的大小

因此我们可以使用该函数来进行注释的添加,但是本人尝试了半天还是没搞明白,仅供参考,于是终于找到了另一个高效的函数annotate(),它的使用方法非常简单,annotate("text",x=3,y=3,label="加入的文字"),其中仅仅需要修改x和y坐标(同数据坐标一样)。

因此可以这样使用

p<-p+annotate("text",x=3,y=3,label="文字充填")
#增加尺寸
p<-p+annotate("text",x=4,y=4,label="文字充填",size=2)

4.绘制边际图形

最后来绘制边际图形,有很多个类型可供选择,包括直方图、核密度图等,具体参考边际直方图

type=" "作用
density密度曲线
histogram直方图
boxplot箱线图
violin小提琴图
densigram密度图与直方图
ggMarginal(p,type="histogram",fill="skyblue")

其中更改type类型即可绘制不同的图形,fill表示填充颜色,col可更改描边颜色。我们使用核密度曲线尝试。(颜色参考颜色参数,更加详细的形状设置参考R语言绘图各类基本参数)

ggMarginal(p,type="density",col="red",fill="skyblue")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值