目录
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语言画图多一点)。
(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语言常用工具包及介绍。
- 常用工具包分类
- 常用包
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,所以不好实现。
那么我们逐项修改:
- 将背景删去,同样删去网格线
p<-p+theme(panel.grid.major = element_blank(),panel.grid.minor=element_blank(),panel.border = element_blank(), panel.background = element_blank())
- 添加坐标轴的实线
pt<-pt+theme(axis.line.x = element_line(color = "black"), axis.line.y = element_line(color = "black"))
- 修改坐标轴极值和间距
p<-p+scale_y_continuous(breaks=seq(2,4.5,1))+scale_x_continuous(breaks=seq(0,8,2))
#修改成适合自己的坐标轴范围,其中第一个是最小值,第二个是最大值,第三个是间距
- 添加文字(包括坐标轴名称)
默认坐标轴名称是变量的名称,如果我们要修改的话,则修改刻度标签
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")