强制原点从0开始

如何在 ggplot2中设置 y 轴和 x 轴的起点/截取?

X 轴的直线应该正好在 y=Z

Z=0或另一个给定的值。

211108 次浏览

xlimylim在这里不行,你需要使用 expand_limitsscale_x_continuousscale_y_continuous。试试:

df <- data.frame(x = 1:5, y = 1:5)
p <- ggplot(df, aes(x, y)) + geom_point()
p <- p + expand_limits(x = 0, y = 0)
p # not what you are looking for

enter image description here

p + scale_x_continuous(expand = c(0, 0)) + scale_y_continuous(expand = c(0, 0))

enter image description here

你可能需要稍微调整一下,以确保点不会被切断(例如,看到,在 x = 5y = 5的点。

只需将这些内容添加到 ggplot 中:

+ scale_x_continuous(expand = c(0, 0), limits = c(0, NA)) +
scale_y_continuous(expand = c(0, 0), limits = c(0, NA))

例子

df <- data.frame(x = 1:5, y = 1:5)
p <- ggplot(df, aes(x, y)) + geom_point()
p <- p + expand_limits(x = 0, y = 0)
p # not what you are looking for




p + scale_x_continuous(expand = c(0, 0), limits = c(0,NA)) +
scale_y_continuous(expand = c(0, 0), limits = c(0, NA))

enter image description here

最后,注意不要无意中将数据排除在图表之外。例如,一个 position = 'dodge'可能会导致一个条完全离开图表(例如,如果它的值为零,你从零开始轴) ,所以你可能看不到它,甚至不知道它在那里。我建议先完整地绘制数据,然后检查,然后使用上述技巧,以改善绘图的美学。

在 ggplot2的最新版本中,这可能更容易。

p <- ggplot(mtcars, aes(wt, mpg))
p + geom_point()
p+ geom_point() + scale_x_continuous(expand = expansion(mult = c(0, 0))) + scale_y_continuous(expand = expansion(mult = c(0, 0)))

enter image description here

有关详细信息,请参阅 ?expansion()

另一种选择是使用 coord_cartesianexpand = FALSE。限制是从数据或基于您的限制。下面是一个可重复的例子:

df <- data.frame(x = 1:5, y = 1:5)


library(ggplot2)
p <- ggplot(df, aes(x, y)) + geom_point()
p <- p + expand_limits(x = 0, y = 0)
p + coord_cartesian(expand = FALSE)

创建于2022-11-26与 Reprex v2.0.2

您也可以像下面这样直接在 coord_cartesian中指定限制:

df <- data.frame(x = 1:5, y = 1:5)


library(ggplot2)
p <- ggplot(df, aes(x, y)) + geom_point()
p + coord_cartesian(expand = FALSE, xlim = c(0, NA), ylim = c(0, NA))

创建于2022-11-26与 Reprex v2.0.2