文章目录

  • 定义主题格式
  • 完成多图拼凑
  • 使用`ggarrange函数`中`align参数`完成上下对齐
  • 使用`annotate_figure函数`添加批注

   通常绘制了多张图,但是不清楚如何排版,或者是图中如何插入其他图,这里可以利用R包ppubr包完成。

定义主题格式

   本次分享的例子使用R自带的数据集mtcars,画散点图和箱线图等

#首选安装和加载包
install.packages('ppubr')
library(ppubr)
#设定我们下面将要用到的主题格式
mytheme <-  theme_bw()+theme(axis.ticks.y= element_line(colour='black', size = 1),panel.grid.minor = element_blank(),panel.grid.major = element_line(colour = NA),axis.text.x = element_text(hjust = 1, size = 15,colour='black'),axis.text.y = element_text(hjust = 1, size = 15,colour='black',),axis.title = element_text(size = 15,colour='black'),panel.border = element_rect(colour="black", size=1),legend.title=element_text(size=15,colour='black'),legend.text=element_text(size=15,colour='black'))

完成多图拼凑

#画三个散点图,拼起来
p1 <- ggplot(mtcars,aes(x=mpg ,drat))+geom_point()+geom_smooth(method = lm)+mytheme
p2 <- ggplot(mtcars,aes(x=mpg ,disp))+geom_point()+geom_smooth(method = lm)+mytheme
p3 <- ggplot(mtcars,aes(x=disp ,drat))+geom_point()+geom_smooth(method = lm)+mytheme
ggarrange(p1,p3, p2, labels = c("A", "B", "C"), ncol = 2, nrow = 2)

使用ggarrange函数align参数完成上下对齐

但我们发现A,C图上下没有对齐,在代码里加上align = "v", 就可以

fig <- ggarrange(p1,p3, p2, labels = c("A", "B", "C"), align = "v", ncol = 2, nrow = 2)
fig

使用annotate_figure函数添加批注

annotate_figure(p,top = NULL,bottom = NULL,left = NULL,right = NULL,fig.lab = NULL,fig.lab.pos = c("top.left", "top", "top.right", "bottom.left", "bottom","bottom.right"),fig.lab.size,fig.lab.face
)

annotate_figure的五个参数,topbottomleftrightfig.lab就是在不同位置给予批注

annotate_figure(fig,top = text_grob("Visualizing mtcars", color = "orange", face = "bold", size = 14),bottom = text_grob("Data source: mtcars data", color = "blue", hjust = 1, x = 0.7, face = "italic", size = 10),left = text_grob("Three variables", color = "orange", rot = 90))


但不一定所有图都是把面板平分,比如下图:

ggarrange(p1, p3, p2,NULL,ncol = 2, nrow = 2,align = "hv",widths = c(1, 0.5),#第一列图宽度是第二列的2倍heights = c(1, 1),common.legend = TRUE)


总是不够如意,假设现在我想的是AB一样大小, C铺满下层。可以用cowplot包完成,代码如下

ggdraw() +draw_plot(p1, x = 0, y = .5, width = .5, height = .5) +draw_plot(p3, x = .5, y = .5, width = .5, height = .5) +draw_plot(p2, x = 0, y = 0, width = 1, height = 0.5,hjust =0.01) +draw_plot_label(label = c("A", "B", "C"), size = 15,x = c(0, 0.5, 0), y = c(1, 1, 0.5))

这里的x,y是每张图的左下角位置,width,height是每张图的高度,具体示意图看下面的。

只不过P2的图片宽度是另外两个的2倍,所以能占据所有下层


但利用ggarange可以很好的吧边际的箱线图或密度曲线放在边边,代码如下

p7 <- mtcars %>%  #生成密度曲线ggplot(aes(x=mpg))+geom_density(fill='grey')+labs(x=NULL,y=NULL)+theme(rect = element_blank(),axis.ticks = element_blank(),axis.text = element_blank(),axis.line = element_blank(),panel.grid.minor = element_blank())p8 <- mtcars %>%  #生成密度曲线ggplot(aes(y=drat))+geom_density(fill='grey')+labs(x=NULL,y=NULL)+theme(rect = element_blank(),axis.ticks = element_blank(),axis.text = element_blank(),axis.line = element_blank(),panel.grid.minor = element_blank())
#把密度曲线和散点图结合,两个轴分别表示变量的分布
ggarrange(p7, NULL, p1, p8,ncol = 2, nrow = 2,align = "hv",widths = c(1, 0.5),heights = c(0.5, 1),common.legend = TRUE)


有时候,我们还需要在大图里面插入小图,这里使用annotation_custom函数 ,annotation_custom(grob, xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = Inf),其中xmin , xmax , ymin , ymax分别是插入图片的4个顶点的位置

# 添加副图
#在散点图添加两种数据的直方图
p4 <- mtcars %>% select(mpg,disp) %>%pivot_longer(everything()) %>%ggplot(aes(y=value,x=name, fill=name))+geom_boxplot()+geom_jitter(alpha=0.2)+mytheme+labs(x=NULL,y=NULL)p1+annotation_custom(ggplotGrob(p4),xmin = 10, xmax = 25,ymin = 4.3, ymax = 5)


下面这个图类似于上面在外面插入密度曲线,只不过这是在内部分贝插入箱线图

#为散点图数据两个维度分布添加直方图
p1 <- ggplot(mtcars,aes(x=mpg ,drat))+geom_point()+geom_smooth(method = lm)+mytheme+ylim(2.6,5)+xlim(9.5,35)
p5 <- mtcars %>%ggplot(aes(x=mpg))+geom_boxplot(fill='grey')+labs(x=NULL,y=NULL)+theme(rect = element_blank(),axis.ticks = element_blank(),axis.text = element_blank(),axis.line = element_blank(),panel.grid.minor = element_blank())p6 <- mtcars %>%ggplot(aes(y=drat))+geom_boxplot(fill='grey')+labs(x=NULL,y=NULL)+theme(rect = element_blank(),axis.ticks = element_blank(),axis.text = element_blank(),axis.line = element_blank(),panel.grid.minor = element_blank())
p1 + annotation_custom(ggplotGrob(p5),xmin = 10, xmax = 35,ymin = 2.5, ymax = 2.7) +annotation_custom(ggplotGrob(p6),xmin = 9, xmax = 10.5,ymin = 3, ymax = 5)

R语言ggplot2 | 多图排版相关推荐

  1. R语言ggplot2可视化图中添加希腊字母实战

    R语言ggplot2可视化图中添加希腊字母实战 目录 R语言ggplot2可视化图中添加希腊字母实战 #ggplot2可视化图中添加希腊字母1

  2. R语言 ggplot2 多图排列 Part(1)

    在写论文或者报告的时候,肯定会不可避免的遇到编辑多图成一个图的情况.其实方法可以有很多,比方说最笨的办法用PPT自己手动拖移,再高级一点的用PS软件.但是都很繁琐(笔者惭愧的表示这些方法都用过).仔细 ...

  3. r语言ggplot2误差棒图快速指南

    给直方图和线图添加误差棒 准备数据 这里使用ToothGrowth 数据集. library(ggplot2) df <- ToothGrowth df$dose <- as.factor ...

  4. R语言ggplot2可视化箱图(boxplot)并使用ggsignif添加分组显著性(significance)标签

    R语言ggplot2可视化箱图(boxplot)并使用ggsignif添加分组显著性(significance)标签 目录 R语言ggplot2可视化箱图(boxplot)并使用ggsignif添加显 ...

  5. R语言ggplot2可视化密度图(density plot)、改变密度图下的填充色实战

    R语言ggplot2可视化密度图(density plot).改变密度图下的填充色实战 目录 R语言ggplot2可视化密度图(density plot).改变密度图下的填充色实战

  6. R语言ggplot2可视化分组的重叠图实战:grouped overlay plot

    R语言ggplot2可视化分组的重叠图实战:grouped overlay plot 目录 R语言ggplot2可视化分组的重叠图实战:grouped overlay plot #仿真数据

  7. R语言ggplot2可视化分面图使用facet_wrap函数和facet_grid函数实战

    R语言ggplot2可视化分面图使用facet_wrap函数和facet_grid函数实战 目录 R语言ggplot2可视化分面图使用facet_wrap函数和facet_grid函数实战

  8. R语言ggplot2可视化:可视化华夫饼图(Waffle Chart) 、华夫饼图可以直观地显示完成度(百分比)或者部分占整体的比例、华夫饼图适合于同类型指标的比较(Waffle Chart)

    R语言ggplot2可视化:可视化华夫饼图(Waffle Chart) .华夫饼图可以直观地显示完成度(百分比)或者部分占整体的比例.华夫饼图适合于同类型指标的比较(Waffle Chart) 目录

  9. R语言ggplot2可视化树状图、层次聚类系统树图、树状图根据给定的距离度量将相似点分组在一起、并根据点的相似性将它们组织成树状图链接起来(Hierarchical Dendrogram)

    R语言ggplot2可视化树状图.层次聚类系统树图.树状图根据给定的距离度量将相似点分组在一起.并根据点的相似性将它们组织成树状图链接起来(Hierarchical Dendrogram) 目录

最新文章

  1. 5行代码,快速实现图像分割,代码逐行详解,手把手教你处理图像 | 开源
  2. 惊!YOLOv5重磅来袭!还是基于Pytorch实现?
  3. (转)javascript关于运动的各种问题经典总结
  4. java 连接数据库之一个完整的函数
  5. Bootstrap 字体图标(Glyphicons)
  6. Mysql事务处理问题
  7. iOS iOS9下修改回HTTP模式进行网络请求
  8. VTK:PolyData之CurvaturesDemo
  9. hbase数据导入到mysql(转载+自己验证整理,目前失败)
  10. LL-verilog语法多位宽全加器
  11. macOS下的视频格式转换器
  12. C# where用法解析
  13. Linux查看CPU型号及内存频率及其它信息的命令
  14. nuxt.js项目打包上传服务器pm2启动各种问题
  15. C语言经典编程100题
  16. RN:真机调试无线调试
  17. 【食品加工技术】第一章 食品加工技术概述 笔记
  18. 用Web标准进行开发
  19. 用surfaceview播放FFmpeg解码视屏
  20. K均值聚类算法(HCM,K-Means)

热门文章

  1. 2015年10月管理计算机,全国2015年10月高等教育自学考试管理系统中计算机应用考前密卷和答案...
  2. 贝尔商道赚钱思维36道第11道:扩大影响圈缩小关注圈
  3. Novate 一款Android RxStyle的网络框架
  4. RTT之硬件定时器使用
  5. openstack学习笔记之一:基础知识
  6. 循环案例代码详解(1)
  7. 给DreamweaverCs6安装Emmet插件,让你快速编写html标签
  8. android图片压缩小结
  9. Hi3559AV100 HDMI转MIPI-CSI LT6911UXC转换芯片调试
  10. 下载量暴跌 90% 后推出安卓版,Clubhouse 能翻身吗?