基于 R 语言的科研论文绘图技巧详解(6)

简介: 基于 R 语言的科研论文绘图技巧详解(6)

简介

在查阅文献的过程中,看到了几幅非常不错的出版图,今天就跟着小编一起学习下,他们是怎么使用 R 绘制出来的。




今天主要介绍 第六幅图(F) —— 四维散点图,这个图在科研绘图中也是较为常用。可以展现多个维度的数据。

前五幅图的详细代码介绍可见:基于 R 语言的科研论文绘图技巧详解(4)基于 R 语言的科研论文绘图技巧详解(3)基于 R 语言的科研论文绘图技巧详解(2)基于 R 语言的科研论文绘图技巧详解(1) 。最后一幅图会随后继续介绍,读者在学习过程中,可以将内部学到的知识点应用到自己的图形绘制中。推文已经将主要知识点进行罗列,更有利于读者学习和查阅。

那我们来看看,作者是怎么实现这个功能的吧,本文知识点较多,大家耐心学习,建议自己实践。对应代码、数据可在 GitHub - marco-meer/scifig_plot_examples_R: Scientific publication figure plotting examples with R[1] 中找到。

绘图

加载包

首先加载一些需要使用到的包。

library(ggplot2) 
library(viridis) # 使用配色样式

设置主题

接下来,为了方便起见,作者在绘图前设置好了主题,并将该函数命名为 my_theme

这一部分在第一篇推文给出,代码将在文末中完整代码给出。

手动修改大部分面板,具体可以参考本篇文章[2]。或者观看我在 B 站发布的《R 语言可视化教程》,里面也有一些简单主题设置介绍。

导入数据

首先使用 read.csv() 导入四维数据,前 6 行数据如下所示。

data_F = read.csv("./data_F.csv")
head(data_F)
#     K         n     amplitude duration
1 32.586025 3.065018  21.95444 2.3242144
2  9.012644 2.358836  60.16122 1.0029049
3 10.814589 1.829281  25.99396 0.5406435
4 23.560813 1.709909  61.18815 2.7394397
5  7.626436 1.566929  54.41945 0.7152433
6 15.295503 2.276775  39.79195 0.8423647

绘制图形

简单绘制散点图 geom_point()amplitude 来设置形状大小,duration 来作为填充依据。

base_size = 12 
ggplot(data=data_F,
                  aes(x=K,y=n,
                      size=amplitude,
                      fill=duration))+
  geom_point(pch=21)



添加主题,并修改 x、y 轴刻度和标签。

注意:x 轴中转化成对数刻度 (trans = 'log10')。

my_theme() +
  scale_x_continuous(expand = c(0, 0),
                     trans = 'log10',
                     labels=c(1,10,100),
                     breaks=c(1,10,100),
                     limits = c(1,100)) +
  scale_y_continuous(expand = c(0, 0),
                     breaks=c(seq(0,4,by=0.5)),
                     limits = c(0,4)) + +   
  xlab(expression(paste("dissociation constant",~~italic("K")," (M)"))) +
  ylab("Hill coefficient n")



使用 annotation_logticks() 添加对数刻度。scale_size(range = c(1, 3)) 修改散点的大小范围。这里还使用了 viridis 包中的配色样式 scale_fill_viridis(option="D")。最后修改图例位置 theme(legend.position = c(0.9,0.35))

annotation_logticks(sides='b') + #添加对数刻度
  scale_size(range = c(1, 3)) + #散点的大小范围
  scale_fill_viridis(option="D") + #配色样式
  theme(legend.position = c(0.9,0.35))  #修改图例位置



但是,最下面有一个点并没有显示清楚,这里作者运用了一个小技巧(上一篇也用到了),将这些点清晰的呈现出来。来看看这个代码的效果:

coord_cartesian(clip = "off")



完整代码

# Panel F ----
library(ggplot2) 
library(vi)
base_size = 12 
my_theme <-  function() {
  theme(
    aspect.ratio = 1,
    axis.line =element_line(colour = "black"),  
    # shift axis text closer to axis bc ticks are facing inwards
    axis.text.x = element_text(size = base_size*0.8, color = "black", 
                               lineheight = 0.9,
                               margin=unit(c(0.3,0.3,0.3,0.3), "cm")), 
    axis.text.y = element_text(size = base_size*0.8, color = "black", 
                               lineheight = 0.9,
                               margin=unit(c(0.3,0.3,0.3,0.3), "cm")),  
    axis.ticks = element_line(color = "black", size  =  0.2),  
    axis.title.x = element_text(size = base_size, 
                                color = "black", 
                                margin = margin(t = -5)), 
    # t (top), r (right), b (bottom), l (left)
    axis.title.y = element_text(size = base_size, 
                                color = "black", angle = 90,
                                margin = margin(r = -5)),  
    axis.ticks.length = unit(-0.3, "lines"),  
    legend.background = element_rect(color = NA, 
                                     fill = NA), 
    legend.key = element_rect(color = "black",  
                              fill = "white"),  
    legend.key.size = unit(0.5, "lines"),  
    legend.key.height =NULL,  
    legend.key.width = NULL,      
    legend.text = element_text(size = 0.6*base_size, 
                               color = "black"),  
    legend.title = element_text(size = 0.6*base_size, 
                                face = "bold", 
                                hjust = 0, 
                                color = "black"),  
    legend.text.align = NULL,  
    legend.title.align = NULL,  
    legend.direction = "vertical",  
    legend.box = NULL, 
    panel.background = element_rect(fill = "white", 
                                    color  =  NA),  
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    plot.title = element_text(size = base_size, 
                              color = "black"), 
  ) 
}
data_F = read.csv("./data_F.csv")
head(data_F)
panel_F <- ggplot(data=data_F,
                  aes(x=K,y=n,
                      size=amplitude,
                      fill=duration))+
  geom_point(pch=21) +
  my_theme() + 
  scale_x_continuous(expand = c(0, 0),
                     trans = 'log10',
                     labels=c(1,10,100),
                     breaks=c(1,10,100),
                     limits = c(1,100)) +
  scale_y_continuous(expand = c(0, 0),
                     breaks=c(seq(0,4,by=0.5)),
                     limits = c(0,4)) +   
  xlab(expression(paste("dissociation constant",~~italic("K")," (M)"))) +
  ylab("Hill coefficient n") +
  annotation_logticks(sides='b') +
  scale_size(range = c(1, 3)) +
  scale_fill_viridis(option="D") + # a color palette from the viridis package
  theme(legend.position = c(0.9,0.35)) +
  coord_cartesian(clip = "off")
panel_F

小编有话说

本文主要学到的知识点如下:

  1. 使用 annotation_logticks() 添加对数刻度。
  2. 使用 scale_size()修改散点的大小范围;
  3. 使用 viridis 包中的配色样式 scale_fill_viridis()
  4. 使用 theme(legend.position = )修改图例位置。

看完这篇文章,相信你的技能包又多了点东西。记得实操噢!看了不代表就会了~ 如果觉得内容有用的话,小编写的有心的话。给小编来杯咖啡吧!

参考资料

[1]

GitHub - marco-meer/scifig_plot_examples_R: Scientific publication figure plotting examples with R: https://github.com/marco-meer/scifig_plot_examples_R

[2]

文章: https://ggplot2.tidyverse.org/reference/theme.html

目录
相关文章
|
编解码 数据可视化 数据挖掘
R语言之基础绘图
R语言之基础绘图
172 0
|
数据可视化
R语言绘图教程丨Nature论文都在用的多组比较箱线图,自动计算显著性并标注,附带误差线
R语言绘图教程丨Nature论文都在用的多组比较箱线图,自动计算显著性并标注,附带误差线
|
7月前
R语言绘图相关函数(含实例)
R语言绘图相关函数(含实例)
71 0
R语言笔记丨绘图基础知识:饼图、条形图
R语言笔记丨绘图基础知识:饼图、条形图
|
7月前
|
机器学习/深度学习 数据可视化 数据挖掘
数据分享|R语言对论文作者研究机构、知识单元地理空间数据可视化
数据分享|R语言对论文作者研究机构、知识单元地理空间数据可视化
|
7月前
|
机器学习/深度学习 XML 自然语言处理
R语言LDA、CTM主题模型、RJAGS 吉布斯GIBBS采样文本挖掘分析论文摘要、通讯社数据
R语言LDA、CTM主题模型、RJAGS 吉布斯GIBBS采样文本挖掘分析论文摘要、通讯社数据
|
7月前
|
编译器
R语言JAGS贝叶斯回归模型分析博士生延期毕业完成论文时间
R语言JAGS贝叶斯回归模型分析博士生延期毕业完成论文时间
|
存储 Go
速绘丨GO富集气泡图绘制方法,利用R语言ggplot2包快速绘制,完整脚本可重复绘图
速绘丨GO富集气泡图绘制方法,利用R语言ggplot2包快速绘制,完整脚本可重复绘图
|
数据采集 机器学习/深度学习 SQL
绝不可错过!R语言与ggplot2实现SCI论文数据分析神器
绝不可错过!R语言与ggplot2实现SCI论文数据分析神器
232 0
|
数据格式
基于 R 语言的绘图技巧汇总
基于 R 语言的绘图技巧汇总
107 1