在使用R语言进行数据可视化的时候,常常需要将多张统计图表绘制在同一张图上面,从而更高效地传递信息,下面我们就来一起看看具体如何实现。
一、使用R语言自带的函数绘制的图像
R语言本身就已经内置了许多绘图函数,能够满足较为基本的绘图需求,例如hist()
、boxplot()
、spineplot()
等等。如果我们想要将使用这些函数绘制的图像汇总在一张图中,需要使用split.screen()
和screen()
函数,具体方法如下:
1. 步骤一:分割屏幕split.screen()
顾名思义,split.screen()
函数是用于分割屏幕的,它需要传入一个形似c(nrow, ncol)
的参数,意为将屏幕分割为nrow
行,ncol
列;分割完成后函数会返回一个整数(integer)型向量,长度等于nrow * ncol
,即为分割之后屏幕的每一个部分对应的“编号”。这些“编号”将用于传入screen()
函数,进行后续的绘图工作。
2. 步骤二:指定绘图位置screen()
分隔完屏幕之后,我们需要首先指定一张子图的位置,使用screen()
函数,传入之前分割屏幕时返回的“编号”, 便完成了指定。
3. 步骤三:绘图
完成指定子图位置之后,便可以进行正常的绘图工作,使用hist()
、boxplot()
、spineplot()
等函数进行绘图,注意每绘制完一张图就需要使用screen()
来更改绘图的位置。下面我们来看一个实例:
这里我们使用R语言内置的数据集AirPassengers
和cars
来进行演示:
# 分割屏幕
> split.screen(c(2, 1))
> [1] 1 2# 绘制第一个图
> screen(1)
> plot(cars)# 绘制第二个图
> screen(2)
> plot(AirPassengers)# 结束绘图
> dev.off()
二、使用ggplot2绘制的图像
ggplot2
是非常流行的R语言可视化包,功能极为强大,能够绘制众多复杂的统计图表。在同一张图中显示多张ggplot2
图像同样也需要借助第三方的R包——ggpubr
。 ggpubr
包中的ggarrange()
可以方便地将多张图整合在一张上面。其常用的参数如下:ggarrange(..., ncol = NULL, nrow = NULL)
。
其中...
是按顺序依次列出的需要整合的图表, ncol
是列数,nrow
是行数。可以看出,相比于R语言自带函数绘制的图像,在ggarrange()
的帮助下,ggplot2
绘制的图像整合起来更加方便,下面我们看一个实例,依然使用R语言内置的数据集cars
:
# 绘制第一个图像
> p1 = ggplot(cars, aes(x = speed, y = dist)) +geom_line(size = 1) +labs(x = "speed", y = 'dist')# 绘制第二个图像
> p2 = ggplot(cars, mapping = aes(x = speed, y = dist)) +geom_point(size = 1, col = 'darker') + labs(x = "speed", y = 'dist') # 整合两张图
> ggarrange(p1, p2, ncol = 2, nrow = 1)