Как изменить положение чисел на оси x в geom_bar ()

Во-первых, извините за мой плохой английский :(.

У меня вопрос к geom_bar: на моем графике числа находятся в середине полосы. Например, кажется, что существует около 500000 деревьев (Bäume) с IBaum = 5, но на самом деле существует около 50 000 деревьев МЕЖДУ 0 и 5.

Итак, мой вопрос: как я могу изменить положение чисел на оси x?

my plot

мой текущий код:

p1 = ggplot(data = plotdat, 
            aes(x = factor(IB), y = Anzahl, fill = factor(PFT, levels = c(1,2,3,4)))) +
  geom_bar(stat = "identity", width = 0.8, position = "stack")+
  labs(title = TeX(paste("Anzahl der Bäume mit Wachstum $\\geq$ 0 zu $I_{Baum}$", 
                         sep = "" )), 
       x = TeX(paste("$I_{Baum} $", "$\\lbrack$%$\\rbrack$", "aus Inventur", invn[1], 
                     sep = " ")), 
       y = TeX("Anzahl der Bäume mit Wachstum $\\geq$ 0")) +
  scale_fill_manual("PFT", 
                    values = c("#95C11F", "#788938", "#243B0B", "#006633"), 
                    labels= c(1,2,3,4)) +
  theme_minimal(base_size = 14) 

Добро пожаловать в S.O.! Чтобы вам было легче помочь, вы должны предоставить некоторые данные для воспроизведения вашего кода, аналогичные вашему. Это означает, что вы можете опубликовать результат dput(plotdat), если вы можете поделиться своими исходными данными или создать фальшивые данные, похожие на ваши, и опубликовать их.

s__ 13.08.2018 10:09
1
1
236
1

Ответы 1

Если ваша ось x является непрерывной (а не дискретной), вы можете расположить разрывы в нецелочисленных позициях. Вот набор данных игрушек для иллюстрации:

data <- mtcars %>% mutate(x = factor(cyl)) %>% count(x)

> data
# A tibble: 3 x 2
       x     n
  <fctr> <int>
1      4    11
2      6     7
3      8    14

Переменная x здесь является фактором (соответствует x = factor(IB) в вашем коде). Если мы построим его как есть, метки будут центрированы в середине каждой полосы. Однако, если мы преобразуем переменную x назад в числовое значение, мы можем указать разрывы следующим образом, который вставляет метку «0» в начало (x = 0,5) и сдвигает все другие метки вправо на 0,5:

ggplot(data, 
       aes(x = as.integer(x), y = n)) + 
  geom_col() +
  scale_x_continuous(breaks = c(0.5, 0.5 + seq_along(levels(data$x))),
                     labels = c("0", levels(data$x))) +
  theme_minimal()

plot

Другие вопросы по теме