【问题标题】:Force the origin to start at 0强制原点从 0 开始
【发布时间】:2012-11-21 23:41:18
【问题描述】:

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

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

使用Z=0 或其他给定值。

【问题讨论】:

    标签: r plot ggplot2 axes


    【解决方案1】:

    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
    

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

    您可能需要稍作调整以确保点不会被截断(例如,请参见 x = 5y = 5 处的点。

    【讨论】:

    • 我还需要指定限制:scale_x_continuous(expand = c(0, 0), limits = c(0,5)),不知何故,没有它它不起作用
    • 我认为再有一个可能会有所帮助,它使用类似expand=expand_scale(mult=c(0,0.1)) 这样的东西,所以你仍然可以在上端获得填充:stackoverflow.com/a/59056123/8400969
    【解决方案2】:

    只需将这些添加到您的 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' 可能会导致条形图完全离开图表(例如,如果它的值为零并且您从零开始轴),因此您可能看不到它,甚至可能不知道它在那里。我建议先完整绘制数据,检查,然后使用上面的技巧来提高绘图的美感。

    【讨论】:

    • 是否也可以将其构建到新的 ggplot 主题中?
    • @Bolle 我不确定,但也有兴趣了解,您可以单独提问并链接到此处
    • 链接here以供将来参考
    【解决方案3】:

    在最新版本的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)))
    

    更多详情请见?expansion()

    【讨论】:

    • 这只会更改数据点周围的填充,但无助于将轴原点设置为零或其他所需值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 2020-06-07
    相关资源
    最近更新 更多