简介
在查阅文献的过程中,看到了几幅非常不错的出版图,今天就跟着小编一起学习下,他们是怎么使用 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
小编有话说
本文主要学到的知识点如下:
- 使用
annotation_logticks()
添加对数刻度。 - 使用
scale_size()
修改散点的大小范围; - 使用 viridis 包中的配色样式
scale_fill_viridis()
; - 使用
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]