1. 连续型变量
对连续型变量进行分面,首先要将其离散化,ggplot2提供了三个辅助函数
- 将数据划分为n个长度相同的部分:cut_interval(x, n)
- 将数据划分为宽度分别为width的部分:cut_width(x, witdh)
- 将数据划分为n个有(大致)相同数目点的部分:cut_number(x, n = 10)
下面展示了三种方式
# 划分为宽度为1的部分
mpg2$disp_w <- cut_width(mpg2$displ, 1)
# 6个相同宽度的部分
mpg2$disp_i <- cut_interval(mpg2$displ, 6)
# 6个有一样多数目点的部分
mpg2$disp_n <- cut_number(mpg2$displ, 6)
plot <- ggplot(mpg2, aes(cty, hwy)) +
geom_point() +
labs(x = NULL, y = NULL)
plot + facet_wrap(~disp_w, nrow = 1)
plot + facet_wrap(~disp_i, nrow = 1)
plot + facet_wrap(~disp_n, nrow = 1)
需要注意的是,分面公式不会对函数进行求值,所以必须首先创建一个包含了离散化数据的新变量
2. 坐标系
坐标系主要有两大功能
- 将两个位置图像属性组合起来,在图像中形成2维方位系统。位置图像属性分别被称为x和y,但将它们称作位置1和位置2可能会更合适,因为图像位置属性的名字会随着坐标系的不同而不同。比如极坐标系中将其称为角度和半径(或半径和角度),而地图中则称为纬度和经度
- 配合分面,坐标系将绘出坐标轴和面板背景。标度控制着坐标轴上出现的数值,并将数据映射到图像中的位置,然后通过坐标系将它们绘制出来,图像的外观随着坐标系的变化而变化,毕竟角度轴和x轴看起来是很不同的
坐标系有两种。线性坐标系保持了几何对象的形状
- coord_cartesian():默认的笛卡尔坐标系,一个元素的2维位置用x和y的组合进行表示
- coorf_fixed():宽高比固定的直角坐标系
- coord_flip():x轴和y轴翻转了的笛卡尔坐标系
另一方面,非线性坐标系可以改变形状:一条直线可能不再是直线。两点之间的最短距离可能不再是直线
- coord_map()/coord_quickmap():地图投影
- coord_polar():极坐标系
- coord_trans():对数据进行统计变换之后,对x和y位置进行任意变换
3. 线性坐标系
线性坐标系有3种:coord_cartesian()、coord_fixed()和coord_flip()
coord_cartesian()放大图像
函数coord_cartesian()有参数xlim和ylim。标度的范围限制参数可以控制图像的显示范围。标度和coord_cartesian()存在差异,两者的主要区别在于如何进行限制:设置标度的范围限制的时候,抛弃了所有在范围以外的数据,但是在设置坐标系范围的时候,仍然使用所有数据,只是只显示了图像的一小片地方。设置坐标系范围相当于使用放大镜来观察图像
base <- ggplot(mpg, aes(displ, hwy)) +
geom_point() + geom_smooth()
# 完整的数据集
base
# 标度改为5到7之间,抛弃了范围以外的数据
base + scale_x_continuous(limits = c(5, 7))
# 放大到5到7之间,保存着所有数据,不过只展示其中一部分
base + coord_cartesian(xlim = c(5, 7))
coord_flip()翻转坐标轴
大多数统计量和几何形状都假设对基于x条件下的y值感兴趣(比如说,平滑、汇总、箱线图、直线):大部分统计模型都假设测量x的值的时候是没有误差的。如果对基于y条件下的x值感兴趣(或者只是想把图像翻转90°),可以使用coord_flip()来交换x轴和y轴
以下代码将翻转坐标轴和交换x、y变量位置的效果进行了比较
ggplot(mpg, aes(displ, cty)) +
geom_point() + geom_smooth()
# 交换cty和displ,90°翻转了图像
# 不过平滑曲线是对翻转后的数据进行拟合的
ggplot(mpg, aes(cty, displ)) +
geom_point() + geom_smooth()
# coord_flip()将平滑函数对原来的数据进行了拟合
# 然后翻转了输出
ggplot(mpg, aes(displ, cty)) +
geom_point() + geom_smooth() +
coord_flip()
coord_fixed()固定相等标度
coord_fixed()固定了x轴和y轴的长度比例。默认的ratio确保了x轴和y轴有相同的标度:比如说,x轴上的1厘米和y轴上的1厘米表示了相同范围的数据。宽高比也会被自动设定,从而确保在不同输出设备形状下的投影效果依然保持一致。可查阅coord_fixed()文档以获取更多细节