R语言ggplot2 | 多图排版
文章目录
- 定义主题格式
- 完成多图拼凑
- 使用`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的五个参数,top
, bottom
, left
, right
, fig.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 | 多图排版相关推荐
- R语言ggplot2可视化图中添加希腊字母实战
R语言ggplot2可视化图中添加希腊字母实战 目录 R语言ggplot2可视化图中添加希腊字母实战 #ggplot2可视化图中添加希腊字母1
- R语言 ggplot2 多图排列 Part(1)
在写论文或者报告的时候,肯定会不可避免的遇到编辑多图成一个图的情况.其实方法可以有很多,比方说最笨的办法用PPT自己手动拖移,再高级一点的用PS软件.但是都很繁琐(笔者惭愧的表示这些方法都用过).仔细 ...
- r语言ggplot2误差棒图快速指南
给直方图和线图添加误差棒 准备数据 这里使用ToothGrowth 数据集. library(ggplot2) df <- ToothGrowth df$dose <- as.factor ...
- R语言ggplot2可视化箱图(boxplot)并使用ggsignif添加分组显著性(significance)标签
R语言ggplot2可视化箱图(boxplot)并使用ggsignif添加分组显著性(significance)标签 目录 R语言ggplot2可视化箱图(boxplot)并使用ggsignif添加显 ...
- R语言ggplot2可视化密度图(density plot)、改变密度图下的填充色实战
R语言ggplot2可视化密度图(density plot).改变密度图下的填充色实战 目录 R语言ggplot2可视化密度图(density plot).改变密度图下的填充色实战
- R语言ggplot2可视化分组的重叠图实战:grouped overlay plot
R语言ggplot2可视化分组的重叠图实战:grouped overlay plot 目录 R语言ggplot2可视化分组的重叠图实战:grouped overlay plot #仿真数据
- R语言ggplot2可视化分面图使用facet_wrap函数和facet_grid函数实战
R语言ggplot2可视化分面图使用facet_wrap函数和facet_grid函数实战 目录 R语言ggplot2可视化分面图使用facet_wrap函数和facet_grid函数实战
- R语言ggplot2可视化:可视化华夫饼图(Waffle Chart) 、华夫饼图可以直观地显示完成度(百分比)或者部分占整体的比例、华夫饼图适合于同类型指标的比较(Waffle Chart)
R语言ggplot2可视化:可视化华夫饼图(Waffle Chart) .华夫饼图可以直观地显示完成度(百分比)或者部分占整体的比例.华夫饼图适合于同类型指标的比较(Waffle Chart) 目录
- R语言ggplot2可视化树状图、层次聚类系统树图、树状图根据给定的距离度量将相似点分组在一起、并根据点的相似性将它们组织成树状图链接起来(Hierarchical Dendrogram)
R语言ggplot2可视化树状图.层次聚类系统树图.树状图根据给定的距离度量将相似点分组在一起.并根据点的相似性将它们组织成树状图链接起来(Hierarchical Dendrogram) 目录
最新文章
- 5行代码,快速实现图像分割,代码逐行详解,手把手教你处理图像 | 开源
- 惊!YOLOv5重磅来袭!还是基于Pytorch实现?
- (转)javascript关于运动的各种问题经典总结
- java 连接数据库之一个完整的函数
- Bootstrap 字体图标(Glyphicons)
- Mysql事务处理问题
- iOS iOS9下修改回HTTP模式进行网络请求
- VTK:PolyData之CurvaturesDemo
- hbase数据导入到mysql(转载+自己验证整理,目前失败)
- LL-verilog语法多位宽全加器
- macOS下的视频格式转换器
- C# where用法解析
- Linux查看CPU型号及内存频率及其它信息的命令
- nuxt.js项目打包上传服务器pm2启动各种问题
- C语言经典编程100题
- RN:真机调试无线调试
- 【食品加工技术】第一章 食品加工技术概述 笔记
- 用Web标准进行开发
- 用surfaceview播放FFmpeg解码视屏
- K均值聚类算法(HCM,K-Means)
热门文章
- 2015年10月管理计算机,全国2015年10月高等教育自学考试管理系统中计算机应用考前密卷和答案...
- 贝尔商道赚钱思维36道第11道:扩大影响圈缩小关注圈
- Novate 一款Android RxStyle的网络框架
- RTT之硬件定时器使用
- openstack学习笔记之一:基础知识
- 循环案例代码详解(1)
- 给DreamweaverCs6安装Emmet插件,让你快速编写html标签
- android图片压缩小结
- Hi3559AV100 HDMI转MIPI-CSI LT6911UXC转换芯片调试
- 下载量暴跌 90% 后推出安卓版,Clubhouse 能翻身吗?