专栏名称: 生信菜鸟团
生信菜鸟团荣誉归来,让所有想分析生物信息学数据的小伙伴找到归属,你值得拥有!
目录
相关文章推荐
生物制品圈  ·  2025 ... ·  2 天前  
BioArt  ·  Nature | ... ·  2 天前  
生信宝典  ·  Nature | ... ·  4 天前  
51好读  ›  专栏  ›  生信菜鸟团

R tips:使用gtable绘制四轴散点图

生信菜鸟团  · 公众号  · 生物  · 2020-10-13 21:00

正文

四轴散点图就是利用坐标系的四个轴,填充两组信息进去,比如左下两个轴映射一组散点图,右上两个轴映射一组散点图。这个图在桌面绘制工具如Origin中是很好绘制的。但是如果要使用ggplot2绘制,无法直接得到。

gtable包 是可以个性化处理ggplot2对象的包,本文的四轴散点图也是通过gtable来组合的两个散点图。

为了更好的组合两个散点图,需要使用cowplot包对grob对象进行对齐操作。

原始散点图

使用内建数据集iris绘制两张散点图,如下图。

不同于普通的散点图,每个图在右、上添加了次坐标轴(使用scale系列函数的sec.axis参数)。

library(gtable)
library(cowplot)
# 绘图:添加两个次坐标轴

iris %>% ggplot(aes(x = Sepal.Length, y = Sepal.Width, color = Species)) +
  geom_point(shape = 16, size = 3, alpha = 0.8) + theme_cowplot() +
  scale_x_continuous(sec.axis = dup_axis()) +
  scale_y_continuous(sec.axis = dup_axis()) +
  scale_color_brewer(palette = "Paired") -> p1

iris %>% ggplot(aes(x = Petal.Length, y = Petal.Width, color = Species)) + 
  geom_point(shape = 17, size = 3, alpha = 0.8) + theme_cowplot() +
  scale_color_brewer(palette = "Dark2") +
  scale_x_continuous(sec.axis = dup_axis()) +
  scale_y_continuous(sec.axis = dup_axis()) -> p2

cowplot::plot_grid(p1, p2)

对齐拼接并完成绘图

对齐图片

对ggplot2图片进行合并之前,要先让两图的坐标轴可以相互对齐。

这个工作可以使用cowplot包的align_plots来完成。

去除无用坐标轴和legend

第一张图的右、上坐标轴去除,第二张图的左、下坐标轴去除。同时去除legend。

# 1. 使用cowplot对齐绘图的部件
aln_plot 
# 2. 第一张图删除它的右、上坐标轴及legend
#    第二张图删除它的左、下坐标轴及legend
g1 1]], c("axis-r""axis-t""xlab-t""ylab-r""guide-box"))
g2 2]], c("axis-l""axis-b""xlab-b""ylab-l""guide-box"))

拼接legend

如上图中显示的,两张图的legend的信息并不一致,因此需要拼接在一起后,再覆盖到第一张图的legend位置。

获取legend可以使用get_legend函数,拼接的话就要用到gtable(也可以使用cowplot)。

拼接legend后,再将legend放回第一张图的legend位置(已去除原来的legend)。

# 3. 获取legend
l1 1]])
l2 2]])

# 4. 将legend上下排列, 组合成一个gtable对象
g_legend 1,1), "null"),
             widths = unit(1"null"))
g_legend 1, l=1)
g_legend 2, l=1)

# 5. 将第一张图的legend替换为合并的legend
para_list 1]]$layout %>% filter(name == "guide-box") %>% c()
para_list[["x"]] para_list[["grobs"]] g1 

绘图

最后使用cowplot绘图即可,结果如下:

# 6. 绘图






请到「今天看啥」查看全文