最近,在文献中看到这样一个令人惊艳不已的组合图,如下。很明显,这个图至少是由8个小图表组合而成的,通过坐标轴粗细和图表间隔的不一致可以看出来。可见,熟练使用Ai(Adobe illustrator)也是成为科研巨佬的必备技能。
(The Plant Cell, 2020)
除去两侧的聚类树和条形图,组合图的中间部分其实是一种比较新颖的山峦图,也称作山脊线图(Ridgeline plots),可以用作图软件一次性画出来。
山峦图本质上是多个核密度曲线图的相互重叠组合,当然,你也可以看作是只有半个“小提琴”的横向小提琴图。山峦图的用法与小提琴图、箱形图相似,主要用于展示和比较数据(比如基因的表达量、物种的丰度等)的分布情况,而外形上却具有中国山水画的美感。
可以说,能用箱形图、小提琴图展示的数据都以试试山峦图,可能会得到出乎预料的效果。那么,如何绘制这样的山峦图呢?这里推荐使用基于ggplot2的ggridges包。
● 一、 R包安装与数据导入●
山峦图的绘制主要用到ggridges包的geom_density_ridges函数,无需统计分析,可直接使用原始数据绘制密度曲线。
#安装ggridges包;
#install.packages("ggridges")
#载入ggridges和ggplot2包;
library(ggridges)
library(ggplot2)
#读入本地数据;
dt<- read.csv( "test.csv",header = T,row.names = 1)
#查看数据的前12行;
head(dt,12)
● 二、绘制无分组山峦图●
#建立单样本的映射关系;
p1<- ggplot(dt, aes(x = expression, y = cluster,
color= cluster, fill = cluster))
p1
#添加“山峦”图层,查看初始绘图效果;
#scale参数设置绘图区域重叠部分的大小,scale=1 时刚好没有重叠(以最高的为准),数值越大,重叠部分越多;
#alpha设置填充颜色的透明度;
p2<- p1+ geom_density_ridges(scale = 1.6, alpha = 0.3)
p2
#去掉密度曲线两侧的“尾巴”;
p3<- p1+ geom_density_ridges(scale = 1.6, alpha = 0.5,rel_min_height=0.01)
p3
参数rel_min_height用于设置曲线的最小高度(相对于对应曲线最大高度的百分比)。一般来说,rel_min_height=0.01或更大时可去掉密度曲线两侧的“尾巴”。
#添加分位线(中位线);
#线的样式可选solid、dashed、dotted、dotdash、longdash、twodash等。也可指定单一颜色,如vline_color="black";
p3<- p1+ geom_density_ridges(scale = 1.6, alpha = 0.4,
rel_min_height=0.01,
quantile_lines= TRUE,
quantiles= 0.5,
vline_size=0.3,
vline_linetype= "dashed")
p3
#调整坐标轴,修改标题,去掉空余区域;
#coord_cartesian(clip = "off")可避免图形边缘被绘图区剪切;
p4<- p3+scale_y_discrete( name = "") +
scale_x_continuous(name = "Expression levels")+
coord_cartesian(expand=FALSE, clip = "off")
p4
#自定义颜色,并隐藏图例;
mycolor<- c( "#0077c1", "#00a99e", "#6bc72b", "#ff5a20", "#ff1620", "#752995")
p5<- p4+scale_fill_manual(values = rev(mycolor), guide = "none") +
scale_color_manual(values = rev(mycolor), guide = "none")
p5
#p5+theme_ridges(grid = FALSE)
#自定义图形主题;
#去掉panel.background填充颜色;
#去掉纵轴的刻度、横轴的网格线;
#设置坐标轴线、网格线的颜色、粗细;
#Line/border size 的单位是 mm,text size 的单位是 pts;
#设置绘图区边距,顺序为top, right, bottom, left;
mytheme<- theme(panel.background = element_rect(fill = NA),
plot.margin = margin(t=10,r=10,b=5,l=5,unit = "mm"),
axis.ticks.y = element_blank,
axis.ticks.x = element_line(colour = "grey40",size = 0.5),
axis.line.x = element_line(colour = "grey40",size = 0.5),
axis.text.x = element_text(size = 10),
axis.title.x = element_text(size = 12),
panel.grid.major.y = element_line(colour = rev(mycolor),size = 0.5),
panel.grid.major.x = element_blank)
#应用自定义主题;
p5+mytheme
当然,也可以令coord_cartesian(expand=TRUE, clip = "off"),通过panel.grid.major.y = element_line(colour = NA,size = 0.5) 隐藏主刻度线,效果如下。
● 三、 绘制分组山峦图●
#建立分组映射并绘制山峦图;
p6<- ggplot(dt, aes(x = expression, y = cluster, color = sex, fill = sex))+
geom_density_ridges(scale = 1.6, alpha = 0.4,rel_min_height=0.01,
quantile_lines= TRUE,
quantiles= 0.5,
vline_size=0.3,
vline_linetype= "dashed")
p6
#自定义图形主题,图形的个性化调整同上,这里不再赘述;
mytheme1<- theme(panel.background = element_rect(fill = NA),
plot.margin = margin(t=10,r=10,b=5,l=5,unit = "mm"),
axis.ticks.y = element_blank,
axis.ticks.x = element_line(colour = "grey40",size = 0.5),
axis.line.x = element_line(colour = "grey40",size = 0.5),
axis.text.x = element_text(size = 10),
axis.title.x = element_text(size = 12),
panel.grid.major.y = element_line(colour = NA,size = 0.5),
panel.grid.major.x = element_blank)
#自定义颜色和图例;
mycolor1<- c( "#00a99e", "#6bc72b")
p7<- p6+scale_y_discrete( name = "")+
scale_x_continuous(name = "Expression levels")+
coord_cartesian(expand=FALSE, clip = "off")+
scale_fill_manual(values = mycolor1) +
scale_color_manual(values = mycolor1)+
guides(fill = guide_legend(override.aes = list(fill = mycolor1,color = NA)))
p7+mytheme1
这样,分组山峦图的绘制就完成了。除此之外,ggridges包还有很多更复杂的绘图的功能,比如通过使用jittered_points = TRUE,point_shape = "|" 参数可以添加密度线,如下图,图形颜色还可以使用渐变色或者按照分位线着色等。
本次分享就先到这里啦,更多复杂的绘图功能欢迎查看官方的使用教程。
链接:
https://wilkelab.org/ggridges/index.html
▼
参考文献
▼
Sucher J, Mbengue M, Dresen A, et al. Phylotranomics of the Pentapetalae reveals frequent regulatory variation in plant local responses to the fungal pathogen Sclerotinia sclerotiorum[J]. The Plant Cell, 2020, 32(6): 1820-1844.
- 本文固定链接: https://maimengkong.com/image/1099.html
- 转载请注明: : 萌小白 2022年7月8日 于 卖萌控的博客 发表
- 百度已收录