在不删除数据的情况下限制 ggplot2 轴(超出限制):缩放

Posted

技术标签:

【中文标题】在不删除数据的情况下限制 ggplot2 轴(超出限制):缩放【英文标题】:Limit ggplot2 axes without removing data (outside limits): zoom 【发布时间】:2014-10-30 08:47:31 【问题描述】:

如果您在 ggplot 中指定轴限制,则会删除外围点。这对点很好,但您可能想要绘制与指定范围相交的线,但 ggplot 的 rangexlim/ylim 方法会删除这些。是否有另一种方法可以在不删除异常数据的情况下指定绘图轴范围?

例如

require(ggplot2)
d = data.frame(x=c(1,4,7,2,9,7), y=c(2,5,4,10,5,3), grp=c('a','a','b','b','c','c'))
ggplot(d, aes(x, y, group=grp)) + geom_line()
ggplot(d, aes(x, y, group=grp)) + geom_line() + scale_y_continuous(limits=c(0,7))
ggplot(d, aes(x, y, group=grp)) + geom_line() + ylim(0,7)

【问题讨论】:

【参考方案1】:

Hadley 在第 99 页对此进行了解释;他的ggplot2 book (1st edition) 中的 133 个,如果您有 second edition,则为第 160 - 161 页。

问题在于,正如您所说,limits 在比例内或设置ylim() 会导致数据被丢弃,因为它们限制了数据。对于真正的缩放(保留所有数据),您需要在笛卡尔坐标系(或其他坐标系https://ggplot2.tidyverse.org/reference/#section-coordinate-systems)内设置限制。更多内容见:http://docs.ggplot2.org/current/coord_cartesian.html

ggplot(d, aes(x, y, group=grp)) + 
    geom_line() + 
    coord_cartesian(ylim=c(0, 7))

【讨论】:

如果 coord_cartesian 因为我使用 geom_boxplot 而不是一个选项怎么办? coord_cartesian 仍然是geom_boxplot 或其他几何图形的选项。 是的,但不知道如何绘制水平箱线图,因为这需要 coord_flip 并且您不能有两个坐标。 没关系,在这种情况下,您可以将 ylim 设置为 coord_flip 而不是 coord_cartesian

以上是关于在不删除数据的情况下限制 ggplot2 轴(超出限制):缩放的主要内容,如果未能解决你的问题,请参考以下文章

ggplot2 散点图标签

ggplot2 删除轴标签

强制 R 停止绘制缩写轴标签 - 例如ggplot2 中的 1e+00

R语言ggplot2可视化:默认情况下ggplot2在x轴和y轴的刻度线和轴之间保留了一些空间设置ggplot2可视化去除可视化结果与坐标轴之间的空间可视化结果与坐标轴紧紧贴合,没有空白区域

Vis.js 时间轴 - 如何在不嵌套的情况下折叠组

如何在不知道其表的情况下删除约束?