强制原点从0开始

Jon*_*ein 120 plot r axes ggplot2

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

x轴的线应该精确到y=Z.

Z=0或另一个给定的价值.

A5C*_*2T1 171

xlim并且ylim不要在这里削减它.您需要使用expand_limits,scale_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
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

p + scale_x_continuous(expand = c(0, 0)) + scale_y_continuous(expand = c(0, 0))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

您可能需要稍微调整一下以确保点不会被切断(例如,请参阅x = 5和中的点y = 5.

  • 我还需要指定限制:`scale_x_continuous(expand = c(0,0),limits = c(0,5))`,不知何故没有它它不起作用 (24认同)
  • 我认为还有一点可能会有所帮助,即使用类似“expand=expand_scale(mult=c(0,0.1))”这样的东西,这样你仍然可以在上端得到填充:https://stackoverflow.com/a/ 59056123/8400969 (4认同)

use*_*745 16

只需将这些添加到您的 ggplot 中:

+ scale_x_continuous(expand = c(0, 0), limits = c(0, NA)) + 
  scale_y_continuous(expand = c(0, 0), limits = c(0, NA))
Run Code Online (Sandbox Code Playgroud)

例子

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))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

最后,务必小心,不要无意中将数据排除在图表之外。例如,aposition = 'dodge'可能会导致条形完全脱离图表(例如,如果它的值为零并且您从零开始轴),因此您可能看不到它,甚至可能不知道它在那里。我建议首先完整地绘制数据,进行检查,然后使用上述提示来提高绘图的美观性。

  • 我认为最佳答案表明了包含“限制”的必要性。 (2认同)

Shi*_*ang 7

在最新版本的 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)))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

请参阅?expansion()了解更多详情。

  • 这仅更改数据点周围的填充,但无助于将轴原点设置为零或其他所需值。 (2认同)

Qui*_*ten 5

另一种选择是使用coord_cartesianwith expand = 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)
Run Code Online (Sandbox Code Playgroud)

创建于 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))
Run Code Online (Sandbox Code Playgroud)

创建于 2022 年 11 月 26 日,使用reprex v2.0.2