我如何在ggplot2中设置y轴和x轴的原点/截距?
x轴线应该恰好在y=Z
处。
其中Z
可以是0或另一个给定的值。
xlim
和 ylim
在这里无法满足需求。需要使用 expand_limits
、scale_x_continuous
和 scale_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
p + scale_x_continuous(expand = c(0, 0)) + scale_y_continuous(expand = c(0, 0))
您可能需要稍微调整一下,以确保点不会被截断(例如,请参见x = 5
和y = 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))
最后,务必小心不要无意中从您的图表中排除数据。例如,position = 'dodge'
可能会导致柱形图完全被遗漏(例如,如果其值为零,并且您从零开始轴),因此您可能看不到它,甚至不知道它在那里。我建议先完整绘制数据,进行检查,然后使用上述技巧来改善图表的美观度。
limits=c(0,NA)
的好处是可以使“0”出现在轴标签上。如果没有它,绘图区域将包括0,但通常0不会出现在轴标签上。 - macscale_y_continuous(expand = c(0, 0), limits = c(0, NA))
影响了我的图表的上限。我发现只使用scale_y_continuous(limits = c(0, NA))
更加成功。 - Mateus Figueiredocoord_cartesian
并设置 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)
本文创建于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))
使用reprex v2.0.2于2022年11月26日创建
scale_x_continuous(expand = c(0, 0), limits = c(0,5))
,如果没有这个,它就无法正常工作。 - JelenaČuklinaexpand=expand_scale(mult=c(0,0.1))
这样的东西,这样你仍然可以在上端获得填充效果:https://dev59.com/tF8d5IYBdhLWcg3wQwW5#59056123 - Michael Roswell