vlambda博客
学习文章列表

R语言 | 图像嵌套的实现

图层叠加

在进行数据可视化时,面对越来越复杂的数据形式和结果可视化需求,我们经常需要在一张图中通过多种方式对数据进行展示,比如同时使用散点图或箱线图,又或者在散点图的基础上添加趋势线等等。

这些需求在R语言的数据可视化中通常是通过不同图层的叠加来实现,ggplot2的绘图语法就是以图层概念为核心建立的,常规的图层叠加通过ggolot2包很容易实现。

在基于base的R语言可视化中,也将绘图函数分为高级函数和低级函数,例如plot函数为高级函数,而points和lines等函数为低级函数,低级做图函数可以在高级做图函数做的图上随意添加。

如果要求两个或者多个高级做图函数画在同一个图上,而且要求重叠的话,则可以采用par(new=TRUE)函数,在每次使用新的高级做图函数之前加上该语句。

需要注意的是坐标要处理好,因为这样做实际上是把多张图重叠起来,如果多张图的坐标不统一,则会出现坐标混乱的情况。

此外,有些做图函数本身就有这个功能,如matplot()和hist()函数。

举个例子,使用mtcars作为示例数据,现在要同时使用散点图和箱线图来展示不同cyl条件下mpg的数值分布。

首先使用ggplot2方法。

data(mtcars)library(ggplot2)
ggplot(mtcars,aes(cyl,mpg,group= cyl)) +
geom_boxplot() +
geom_point()

R语言 | 图像嵌套的实现

接下来使用base的方法。

mtcars$cyl <- as.factor(mtcars$cyl)
boxplot(mpg~cyl,data = mtcars)
points(mpg~cyl,data = mtcars)

R语言 | 图像嵌套的实现

图像嵌套

再来举个例子说一下图像嵌套,比方说在上文的图像基础上,还想要在图像中使用直方图展示一下mpg的数据分布。

如果此时直接添加直方图。

mtcars$cyl <- as.factor(mtcars$cyl)
boxplot(mpg~cyl,data = mtcars)
points(mpg~cyl,data = mtcars)
par(new = TRUE)
hist(mtcars$mpg)

R语言 | 图像嵌套的实现

可以看到此时图像出现的重叠覆盖,我们需要把直方图放到图中红框的空白位置才行,这时就是图像嵌套。

在基于base的R语言绘图中,里需要在par函数中使用fig参数来指定图像嵌套的位置。

使用fig参数时,需要把画布理解成左下角为坐标(0,0),右上角为(1,1)的一个坐标系。

通过fig=c(x1,x2,y1,y2)来设置该参,x1<x2,y1<y2,x1,y1定位绘图区的左下角,x2,y2定位绘图区的右上角。

使用new=TRUE参数来确认是否在原画布上继续画,还重新在一张新画布上开始画。

mtcars$cyl <- as.factor(mtcars$cyl)
boxplot(mpg~cyl,data = mtcars)
points(mpg~cyl,data = mtcars)
par(fig = c(0.5,0.9,0.5,0.9),new = TRUE)
hist(mtcars$mpg,main = "")

可以看到此时的图像就基本满足了要求。

本文只介绍了基于base的图像嵌套方法,对于ggplot2的图像嵌套我也不会,等以后研究明白了再分享给大家~



我就知道你在看