HOWTO · R
R 中的 ylim() 和 xlim()
本教程探讨如何在 R 中有效使用 ylim() 和 xlim() 来设置数据可视化的坐标轴范围。通过清晰的示例与详细的说明,学习如何改进你的图表。了解控制坐标轴范围为何重要:它能突出关键的数据趋势,并提升你的视觉叙事能力。
本页内容
在 R 的基础图形中,用 ylim 设置纵轴范围,用 xlim 设置横轴范围。将其中一个参数或两个参数都作为下限和上限的一对值,传递给 plot() 等绘图函数。下面的示例在一个散点图中同时展示了两个限制,随后是调整每个坐标轴以及 ggplot2 的说明。
什么是 ylim() 和 xlim()?
在基础 R 图形中设置坐标轴限制,就是把 xlim(横轴)、ylim(纵轴)或两者都传递给 plot() 等绘图函数。每个参数都接受一个包含下限和上限的数值向量。这个完整的示例使用相同的数据同时展示两个限制:
x <- 1:10
y <- c(2, 3, 5, 7, 11, 13, 17, 19, 23, 29)
# Set both visible axis ranges in a base R scatter plot.
plot(x, y, xlim = c(2, 8), ylim = c(0, 30),
xaxs = "i", yaxs = "i",
main = "Selected ranges for x and y")
xlim 和 ylim 参数提供所请求的范围。基础图形通常会在坐标轴的两端各添加少许扩展;xaxs = "i" 和 yaxs = "i" 会关闭这种填充,因此本例显示的正是所提供的 2 到 8 以及 0 到 30 的边界。x 值为 1、9 和 10 的点落在所显示的水平范围之外。这段代码使用 R 自带的基础图形,不需要额外的包。该示例成功运行,并且在标准输出和标准错误上都没有文本输出。
在 R 的基础图形中,ylim 和 xlim 是让你选择所绘制的 y 轴和 x 轴范围的参数。讨论这些选项时,它们的名称常写成 ylim() 和 xlim(),但在调用 plot() 时,你要把边界提供给命名参数,例如 ylim = c(0, 30)。第一个数字是下限,第二个是上限。R 通常会根据所提供的数据选择范围;当你想在多个图之间保持一致的尺度,或想把注意力集中到某个特定区间时,显式限制很有用。
这些参数是 plot() 等基础图形函数的一部分。它们不是每个 R 绘图系统都共有的通用参数。特别是 ggplot2 使用的是不同的接口,下文将对此进行说明。
使用 ylim() 设置 Y 轴限制
使用 ylim 参数设置纵向范围。例如,plot(x, y, ylim = c(0, 30)) 提供 0 和 30 作为 y 轴限制,同时让 x 轴范围根据 x 数据来选择。在默认的 yaxs = "r" 样式下,基础图形会给显示的范围添加填充;当坐标轴应当恰好显示所提供的边界时,添加 yaxs = "i"。边界应使用与所绘制的 y 值相同的单位。更宽的范围可以为标签留出空间,或让多个图具有可比性;更窄的范围可以让选定区间内的变化更容易看清。
在基础图形中,位于所选绘图区域之外的点或图形对象的部分在该区域内不可见。选择限制时要考虑数据以及你想让读者进行的比较。即使一些观测值在其之外,图仍可按所请求的坐标轴范围绘制,因此不应把可见的面板误认为完整的数据范围。
使用 xlim() 设置 X 轴限制
xlim 参数控制水平范围。例如,plot(x, y, xlim = c(2, 8)) 提供 2 和 8 作为 x 轴限制,而 plot() 根据 y 数据选择 y 轴范围。默认的 xaxs = "r" 样式会给显示的范围添加填充;使用 xaxs = "i" 则恰好显示所提供的边界。这在聚焦于某个时间区间、测量值的子集,或多个图共用的水平尺度时很有用。
与 ylim 一样,以 x 变量的单位提供限制,并且对于通常的递增坐标轴,按从下限到上限的顺序提供。如果观测值在可见区间之外,它们不会出现在绘图区域中。将所选区间与原始数据对照检查,以免聚焦的视图掩盖读者所需的上下文。
结合 ylim() 和 xlim() 实现更强的控制
将两个参数传递给同一个基础图形调用,即可提供一个矩形的查看范围,如开头的示例所示。根据你想显示的水平值设置 xlim,根据你想显示的垂直值设置 ylim。默认情况下,基础图形会稍微扩展每个范围;当你想让显示的坐标轴恰好在所提供的限制处结束时,包含 xaxs = "i" 和 yaxs = "i"。比较多个图时,使用相同的限制会让它们的尺度更容易比较;探索单个图时,选择能保留解释该模式所需上下文的边界。
具体行为取决于绘图系统。在 ggplot2 中,坐标轴限制通常使用诸如 scale_x_continuous(limits = c(2, 8)) 和 scale_y_continuous(limits = c(0, 30)) 之类的标度来指定。标度限制会在后续的图层或统计摘要绘制之前剔除范围外的值,这可能会影响这些结果。如果只想缩放视图同时保留数据用于计算,使用 coord_cartesian(xlim = c(2, 8), ylim = c(0, 30))。这些 ggplot2 选项不是 plot() 的 xlim 和 ylim 参数;请使用你的代码所用绘图系统的接口。
结论
对于基础 R 图形,用 xlim 设置水平范围,用 ylim 设置垂直范围;当你需要控制两个坐标轴时,两个参数都传递。选择能支持比较的边界,并记住可见区域之外的观测值可能不会出现。在 ggplot2 中,根据你想让限制影响所绘制的数据还是只影响视图,使用标度限制或 coord_cartesian()。
常见问题
-
我可以在一个图中同时设置两个坐标轴的限制吗? 可以。在同一个基础图形调用中包含
xlim = c(lower_x, upper_x)和ylim = c(lower_y, upper_y)。 -
我应该如何选择边界? 依据每个变量的单位和范围、读者需要进行的比较,以及多个图是否必须共享同一个尺度。检查所选视图是否留下了足够的上下文来解释数据。
-
限制之外的点会怎样? 在基础图形中,它们位于可见绘图区域之外,不会显示在那里。在 ggplot2 中,标度限制可能会把范围外的值从后续计算中移除;
coord_cartesian()则在保留数据用于这些计算的同时缩放视图。 -
xaxs和yaxs是xlim和ylim的替代品吗? 它们控制基础图形中的坐标轴扩展,例如所绘制范围周围的填充。使用xlim和ylim来提供坐标轴限制;默认的坐标轴样式可能会扩展显示的范围。当显示的坐标轴必须恰好在这些限制处结束时,设置xaxs = "i"和yaxs = "i"。