美文网首页
R语言 | 将子图嵌入主图的两种方法

R语言 | 将子图嵌入主图的两种方法

作者: 科研侠 | 来源:发表于2021-10-27 18:13 被阅读0次

    大侠

    可曾听闻图中图的画法

    今天

    给大家分享两种将子图嵌入主图的方法

    当然

    这两种方法的原理不一样

    大家可以对比选择哈

    那么开始分享吧~

    viewport()函数

    第一种方法是使用grid包中的viewport()函数,viewport()函数可以创建视图窗口,由x, y, width, height4个参数视图窗口的大小和位置,范围都是0到1。例如,x=0,y=0表示子图位于主图左下角,x=0.5,y=0.5表示子图位于主图中间,还可以通过just参数来将图形放置在边角,下面的示例代码会展示。另外,还能用unit(数字,"单位")来自己控制距离,这个大家可以自己去试试哈。接下来以一个简单的例子来展示吧!

    #载入包

    library(grid)

    library(ggplot2)

    #画图

    df =data.frame(x = c('A','B','C','D','E'), y = 1:5)

    p1 <- ggplot(df,aes(x,y))+

    geom_bar(stat = "identity")

    p2 <- ggplot(df,aes(x,y))+

    geom_point()

    #将p2嵌入p1中

    vp <- viewport(width = 0.3, height =0.4, x = 0.65,y = 0.5,just=c("left","top"))

    print(p2)

    print(p1,vp=vp)

    上图的最后两句代码很关键,我们需要使用print()函数的vp参数在新的视图窗口画图。在R语言中运行代码时会自动调用print()函数,但当我们想要自定义视图的时候就需要自己手动调用才行。

    这个例子虽然十分简单,但可以相当于一个模板了,只需要做好两张图,然后对号入座,一张图中图就做好啦。

    annotation_custom函数

    第二种方法是使用annotation_custom函数,这个函数不仅可以添加子图,还可以添加表哦。

    函数的格式:

    annotation_custom(grob,xmin,xmax,ymin,ymax)

    grob表示要插入的图表等

    xmin和xmax表示坐标轴的水平位置

    ymin和ymax表示坐标轴的垂直位置

    话不多说,上例子!

    #载入包

    library(ggplot2)

    #画图

    df =data.frame(x = c('A','B','C','D','E'), y = 1:5)

    p1 <- ggplot(df,aes(x,y))+

    geom_bar(stat = "identity")

    p2 <- ggplot(df,aes(x,y))+

    geom_point()

    #添加子图

    p1_grob <- ggplotGrob(p1)

    p2 + annotation_custom(grob = p1_grob,xmin = 3.2,xmax = 5.5,ymin = 1,ymax = 3)

    没错没错,熟悉的配方,重点是展示代码,细节实际需要再调就好了。子图嵌入主图之前要先转化成grob对象,这样,一张图中图就出来了。

    末尾

    最后再展示一下图中嵌入表吧!

    library(ggpubr)

    table <- ggtexttable(df, rows = NULL,

    theme = ttheme("light"))

    table_grob <- ggplotGrob(table)

    p2 + annotation_custom(grob = table_grob,xmin = 3.2,xmax = 5.5,ymin = 1.5,ymax = 3)

    这个表似乎太简洁了,让我们换个主题试试吧。

    table <- ggtexttable(df, rows = NULL,

    theme = ttheme("mBlue"))

    ggtexttable函数的功能还是很强大的,大家可以自己去探索一番。

    值得注意的是,虽然这个展示出来的是表,但它实际是图哦,class()函数的结果是"ggplot"。

    今天分享的内容到这就结束啦,喜欢我们的内容就关注我们吧~

    [参考资料]

    [1]    《ggplot2:数据分析与图形艺术》

    相关文章

      网友评论

          本文标题:R语言 | 将子图嵌入主图的两种方法

          本文链接:https://www.haomeiwen.com/subject/fhppaltx.html