ggplot仅在y轴上显示正值(多面图)

时间:2019-02-05 20:45:38

标签: r ggplot2

library(tidyverse)
mpg2 <- mpg %>% mutate(hwy = hwy - 30)
 ggplot(mpg2, aes(cty, hwy)) + 
   geom_point() + 
   facet_grid(year ~ fl, scales = "free") + 
   scale_y_continuous(expand = expand_scale(mult = 2))

在上面的代码块中,我想同时做三件事:

  1. 不显示任何(-)负y轴标签(在我的示例中,您需要删除-40-30-60标签)。我只希望显示零和正标签。
  2. 保持scales = "free"
  3. 也要保持扩大规模

我该怎么做?

facet delete negative

1 个答案:

答案 0 :(得分:2)

在这种情况下,我们可以将函数传递给scale_y_continuous中的breaks参数,该函数返回长度为2的数字矢量。

library(ggplot2); library(dplyr)
mpg2 <- mpg %>% mutate(hwy = hwy - 30)
my_breaks <- function(x) c(0, (((max(x) / 2) %/% 10) + 1) * 10)

函数输出0(((max(x) / 2) %/% 10) + 1) * 10给出OP所需的输出。上限是y的最大值除以2,然后向上舍入到10的下一个较大倍数。

示例

my_breaks(67)
# [1]  0 40

情节

ggplot(mpg2, aes(cty, hwy)) + 
  geom_point() + 
  facet_grid(year ~ fl, scales = "free") + 
  scale_y_continuous(expand = expand_scale(mult = 2), 
                                           breaks = my_breaks)

enter image description here