ggplot多图叠加_R作图 ggplot2图片的布局排版
ggplot2是R语言中用来可视化的利器,其图层逻辑非常人性化,简单的说就是一句话一张图,后一张图叠加在前一张图上,所想表达的几乎都可以用一句代码在图形上展示出来。如果刚开始接触R作图的话,完全可以快速地从ggplot2入门而不用去管base作图,ggplot2的用法已经完全覆盖base作图,除了一项(我至今接触到的)——图片布局
刚开始我也曾困惑过,base作图有par()函数来对多张图片进行布局排布,但该函数对于ggplot2的作图结果则是完全无效的。然后网上搜了一通,找了个grid包,其可以说专门用来排版图片的,当然也支持ggplot2,但是个人感觉使用起来不太顺手(由于其功能有点复杂了)。最近刚看到一个函数multiplot,查了下是来自Rmisc包,这个包发布于2013年,我在这之前也没用过,但是这个函数对于ggplot2结果图片的排布来说简单好使(后来简单看了下multiplot函数的源码,原来其就是用了grid包来实现布局的。。。相当于将grid包中关键的部分又封装了下),下面记录下上述两种方法: 先找一个测试集数据,查了下R自带的数据集,最后选用airquality数据集,其记录了纽约1973年5-9月份每日空气质量,如测量对象有Ozone,Solar.R,Wind,Temp
data
names(data)
#[1] "Ozone" "Solar.R" "Wind" "Temp" "Month" "Day"
我想用箱线图展示每个月份下上述4个测量值的变化,那么可以用代码一张一张分别作图,也可以用lapply函数进行循环作图,为了代码的整洁肯定选用后者
vars
p
ggplot(data, aes(x = Month, y = eval(parse(text = x)), fill = Month)) +
geom_boxplot(na.rm = T) +
labs(y = x, title = paste0(x, " In Different Months")) +
theme_light() +
theme(plot.title = element_text(hjust = 0.5)) +
guides(fill = "none")
})
这里有个小技巧,通常如果将function(x)中的x(x这里的类型是字符串)直接作为ggplot2的y变量的值是不行的,需要对x做个转化,这里就用了parse和eval函数,前者将x类型转化为表达式(但不求解),后者则是对表达式求解,我也是长见识了
p为列表,p[[1]]代表第一张图
用Rmisc包的multiplot函数
首先用最简单的方法做两张图
multiplot(plotlist = p[1:4], cols = 2)
rmisc_boxplot1
multiplot(plotlist = p[1:3], cols = 3)
rmisc_boxplot2
这里col表示每列的图片数目
我们还可以通过layout参数来设定图片的排布矩阵,如:
multiplot(plotlist = p[1:3], layout = matrix(c(1,2,3,3), nrow = 2))
rmisc_boxplot3
multiplot(plotlist = p[1:3], layout = matrix(c(1,2,3,3), nrow = 2, byrow = T))
rmisc_boxplot4
是不是很方便。。。。
用grid包的viewport函数
grib包的viewport函数可以画上面的所有布局的图(PS.multiplot函数本来就是调用grib包的,所以当然都可以画出来),但是有一种形式是multiplot函数无法比较方便的实现,但viewport函数可以(主要还是multiplot函数没封装完全,我看了下,重新改下函数,还是可以实现的),如下
先pushViewport设定一个空白画布,然后用pushViewport函数布局(主要用来设定后续viewport的可放置的位置)
library(grid)
grid.newpage()
pushViewport(viewport(layout = grid.layout(3,4)))
然后用print输出图片
print(p[[1]], vp = viewport(layout.pos.row = 1:3, layout.pos.col = 1))
print(p[[2]], vp = viewport(layout.pos.row = 1, layout.pos.col = 2:3))
print(p[[3]], vp = viewport(layout.pos.row = 3, layout.pos.col = 2:3))
print(p[[4]], vp = viewport(layout.pos.row = 1:3, layout.pos.col = 4))
grib_boxplot1
如果上述图片要用multiplot函数来实现,则需要这样写,PS.这矩阵写的好绕,还是viewport显得简洁了
multiplot(plotlist = p[1:4], layout = matrix(c(1,2,2,4,1,0,0,4,1,3,3,4), nrow = 3, byrow = T))
参考资料:
ggplot多图叠加_R作图 ggplot2图片的布局排版相关推荐
- html5中平铺图片,HTML布局排版2 div的和图片平铺方便管理
在HTML里,由于浏览器显示器等差异,浏览器的宽度也会有变化,为了适应不同的宽度,需要用到平铺. 例如页面前面的固定的条等,如果是纯色,可以用背景色,如果不是纯色,是渐变等,可以用条状图平铺. 常见的 ...
- ggplot2箱式图两两比较_R语言ggplot2箱线图绘图总结
主要从如何看图.用图与作图三个方面来对箱线图进行理解和总结. 1.看图 箱线图概述图1 箱线图概述图2 如图所示,箱线图是将一组数据按照大小顺序排列后进行绘制的,包含6个数据节点,分别表示出数据的上边 ...
- r 语言 ggplot上添加平均值_R语言中ggplot2包作数据分布情况下的统计图实例学习(一)
1.小提琴图 小提琴图可以可视化一组或几组数字变量的分布. 问题:您想制作一个小提琴图来比较不同组的密度估计.用gcookbook包与ggplot2包分别绘制. 解决问题: 使用geom_violin ...
- r语言 图形一览_R语言统计与绘图:ggplot2图形组合布局
在科研论文中,有时我们需要绘制几张图形,并将这几张图形整合到一张大图上面. 前面我们学习了基础绘图包怎么组合布局图形,今天来学习两个新函数,看ggplot2绘制的图形怎么组合. ggplot2组合图形 ...
- OpenCV如何叠加大小不同的图片
有时候我们想叠加不同大小的图片,类似于把一个小Logo加到原本图片上去,且能指定Logo的位置,由于add()函数要求输入的图片格式.尺寸相同,所以不能直接使用add()函数,因此再使用之前要先定义感 ...
- 高德地图与CAD图叠加显示方法汇总及优缺点分析
前言 高德地图应用在许多领域,平常我们用的地图导航,除过正常的地图导航指引功能之外,其实还有很多实用的功能.如高德影像地图应用在包括地理.土地测量.水文学.生态学.气象学以及海洋学等方面.Auto ...
- 让 UI 早点下班,高阶切图技巧!基于单张图片的任意颜色转换!
今天,要介绍一种基于 CSS mask-composite 的高级技巧. 通过掌握它,我们可以通过一张 图片,得到关于它的各种变换,甚至乎,得到各种不同颜色的变换. 通过单张 PNG/SVG 得到它的 ...
- R语言删除ggplot可视化图中的所有x轴轴标签实战:ggplot可视化默认包含所有x轴轴标签、删除ggplot可视化图中的所有x轴轴标签实战
R语言删除ggplot可视化图中的所有x轴轴标签实战:ggplot可视化默认包含所有x轴轴标签.删除ggplot可视化图中的所有x轴轴标签实战 目录
- u-tools图床便捷生成markdown图片
u-tools 图床 上传图片生成markdown图片非常便捷. 支持的图片服务器有几种,其中搜狗.网易和掘金的加载速度更快些: 也可以用阿里与和腾讯云的OSS; 其中网易生成图片不是原图尺寸好像被改 ...
- html将两张图重叠居中代码,【CSS技巧】多图片的垂直居中排版
多图片的垂直居中排版,比如相册中相片的缩略图展示页,如图所示: 先看效果: 代码如下: ============================ -//W3C//DTD XHTML 1.0 Trans ...
最新文章
- 某外包程序员炫耀:不用管绩效和代码质量,工作摸鱼,从不加班,没有pua,外包是真的舒服!...
- Custom Url Helper for Zend View
- Leetcode 347. 前K个高频元素 解题思路及C++实现
- php 公交 查询系统,php定做单城市公交路线查询系统
- C++用二进制交换二个数的实现算法(附完整源码)
- QT的QDesignerMemberSheetExtension类的使用
- VMware VIC
- fusionsphere读音_hydroxyapatite
- java response.write_@ResponseBody与response.getWriter .write()区别
- linux百度云备份文件夹,Linux环境下载百度网盘文件
- 解决dom4j java.lang.NoClassDefFoundError: org/jaxen/JaxenException
- OpenShift 4 - Fedora CoreOS (3) - 定制 CoreOS ISO
- 老师使用计算机给小孩子上课,“某某中学教师课堂教学现状”调查问卷
- DevExpress gridcontrol添加了复选框删除选中的多行/批量删除的方法
- python装饰器语法糖_最全python装饰器的各种写法
- Scrapy分布式、去重增量爬虫的开发与设计
- Ubuntu Quickbuild 安装配置
- 简单的 XML、DTD 文件
- DescribingDesign Patterns 描述设计模式
- 多线程练习题(双色球)