#相关R包安装:
install.packages('ggrastr') #稳定版
devtools::install_github('VPetukhov/ggrastr', build_vignettes = TRUE) #开发版
#相关R包载入:
library(ggplot2)
library(cols4all)
library(tidydr)
library(dplyr)
library(ggrastr)
1. R包学习
#测试数据载入:
##调用ggplot2内置钻石数据集
df <- diamonds
dim(df)
head(df)
#散点图绘制:
p <- ggplot(data = df,
aes(x = carat, y = price, color = cut)) +
geom_point() +
theme_bw()
p
#栅格化散点图层:
rasterize(p, layers = 'Point', dpi = 30) #先调一个低分辨率,便于直观对比
#存在多个图层时,可以只栅格化特定图层:
p1 <- ggplot() +
rasterize(geom_point(data = df,
aes(x = carat, y = price, color = cut)),
dpi = 30) + #使用rasterize()嵌套需栅格化的特定图层即可
geom_point(aes(x = runif(20, 0, 5),
y = runif(20, 0, 20000)),
size = 8, color = 'red', shape = 8) +
theme_bw()
p1
#栅格对象的比例大小快捷调整:
rasterize(p, layers = 'Point', dpi = 300, scale = 2.5) #scale大于1会放大
rasterize(p, layers = 'Point', dpi = 300, scale = 0.5) #scale小于1会缩小
2. 进阶实战训练——文献tSNE图复现
#载入本地tSNE散点图测试数据:
dt <- read.csv('tSNE_test.csv', header = T)
dim(dt) #20多万行散点数据,不适合存储为完全的矢量图
head(dt)
#先绘制常规tSNE散点图:
pp <- ggplot(data = dt, aes(x = tSNE_1, y = tSNE_2)) +
geom_point(aes(color = Tissue), size = 0.4, alpha = 0.8)
pp #散点较多,图表加载会较缓慢
#将散点层转换为栅格图像:
pp1 <- ggplot(data = dt, aes(x = tSNE_1, y = tSNE_2)) +
rasterise(geom_point(aes(color = Tissue), size = 0.4, alpha = 0.8),
dpi = 30)
pp1 #低分辨率测试效果
#测试无误,输出符合期刊需求的高分辨栅格散点:
pp2 <- ggplot(data = dt, aes(x = tSNE_1, y = tSNE_2)) +
rasterise(geom_point(aes(color = Tissue), size = 0.4, alpha = 0.8),
dpi = 300,
scale = 0.6) #适当缩小散点
pp2
#图表细节优化:
#自定义主题:
mytheme <- theme_void() + theme(plot.margin = margin(5.5,15,5.5,5.5))
pp3 <- pp2 +
mytheme +
theme_dr(xlength = 0.2,
ylength = 0.2,
arrow = grid::arrow(length = unit(0.1, "inches"),
ends = 'last', type = "closed")) + #添加箭头坐标系
theme(panel.grid = element_blank()) +
guides(color = guide_legend(override.aes = list(size = 5))) #修改图例散点大小
pp3
#自定义配色:
c4a_gui()
mycol <- c4a('kelly', 20)
mycol2 <- colorRampPalette(c4a('paired', 12))(20) #色板颜色数不够的,可以扩展下
pp3 +
scale_color_manual(values = mycol) +
scale_fill_manual(values = mycol)
pp3 +
scale_color_manual(values = mycol2) +
scale_fill_manual(values = mycol2) #文章配色
参考资料&文献
*未经许可,不得以任何方式复制或抄袭本篇文章之部分或全部内容。版权所有,侵权必究。
基迪奥旗下绘图公众号 分享科研绘图技能与工具 欢迎关注与转发~ 你的好友拍了拍你 并请你帮她点一下“分享”~
微信扫一扫
关注该公众号