发布网友 发布时间:2023-02-05 05:24
共1个回答
热心网友 时间:2024-11-16 22:30
分面的作用是在一个页面上自动放置多幅图像,它先将数据划分为多个不同的子集,然后分别将每个子数据集绘制到页面的小图形面板中。
ggplot2 有两种分面类型:
二者之间的区别,可以从下图中看出
网格分面会根据分面表达式,自动设置哪些变量作为行,哪些变量作为列,具体规则如下:
不使用 facet_grid 或加上 facet_null()
宽屏显示,所有图绘制在同一行,方便比较不同图之间的 y 轴位置。
竖直排列,具有相同的横坐标,方便比较 x 轴的位置,尤其适用于不同数据分布的比较。
通常将 level 最多的变量按列放置,充分利用屏幕的宽高比
注意:在上面的图形中,我们可以看到三个空白的面板,这是由于行列变量的不同 level 会两两组合,每种组合绘制一张图片,而没有在数据中出现的组合会产生空白图。
与多行多列图形不同,只有出现的组合才会被绘制,所以不会出现空白图片。
对于多行多列的网格状图,我们可能希望在每行或每列的数据值进行一个汇总,添加一个汇总图。
我们可以设置 margins = TRUE 来展示所有的边际汇总图,或者指定一个字符串或字符串向量如 margins = c("", "") ,来展示某一个变量的边际汇总图
例如
不同于网格分面,封装分面可以这样理解,它首先生成一个长的绘图面板,然后将图形一个个添加进去,填充完一行后另起一行开始填充,这样看起来也是二维的面板。
想要更改面板图形的显示顺序,需要修改对应因子变量的 level 顺序
通过将数据的分面变量设置为 NULL ,可以在所有的子图中绘制一个相同的图像
例如,我们通过将分面变量设置为空,在所有子图中绘制了一个包含所有数据点的浅色点图,这样可以更清晰的看出各部分占总体的情况
这也相当于为所有面板添加了一个背景图
两种分面都可以使用 scales 来控制面板的位置标度是否固定,可以取以下值:
对于 facet_grid 还有一个 space 参数,可接受的值同 scales 一样
我们可以将分组和分面放在一起进行比较。在之前的示例中,我们可以为数据设置不同的图像属性,如颜色、大小等,来区分不同的分组
而分面是根据变量的 level 绘制不同的子图。这两种方式都有各自的优缺点。
在分面中,不同组别拥有不同的面板,相隔较远,难以看出组间的关系;但是不存在组间数据的重叠,能够很好的分隔数据。
而分组则与分面互补,组间容易重叠,但是能够较容易可以看出组间的关系。
例如
在图 A 中,各分组之间都交叠在一起了,很难区分谁是谁,而使用分面,可以将每组都区分开,每组的趋势也很明显
但是,当我们使用回归线时,情况又有些不同了
在图 C 中,我们可以看到 D 、 E 和 G 几乎完全重叠,而 J 则与它们相隔更远
分面还有其他优点,比如,能够很好的设置分组的图形属性和标度等。
可以使用分面绘制出与并列图形类似的效果,但是分面的标注方式会更多一些。
例如
在本章前面的示例中,都是对离散型变量进行分面,对于连续型数据,需要先将其转换为离散型。
有三种转换方式:
例如