Как построить geom_col (), чтобы получить ось Y с центром вокруг 1, а не 0 - PullRequest
2 голосов
/ 08 марта 2019

Я строю некоторые данные, используя ggplot2 geom_bar. Данные представляют отношение, которое должно сосредоточиться вокруг 1, а не 0. Это позволило бы мне выделить, какие категории идут ниже или выше этого центрального числа отношений. Я пытался играть с set_y_continuous() и ylim(), ни один из которых не позволяет мне отправить значение по центральной оси.

В основном: как сделать Y центром 1, а не 0.

извините, если я задаю вопрос, на который дан ответ ... может быть, я просто не знаю правильных ключевых слов?

ggplot(data = plotdata) +
  geom_col(aes(x = stressclass, y= meanexpress, color = stressclass, fill = stressclass)) +
  labs(x = "Stress Response Category", y = "Average Response Normalized to Control") +
  facet_grid(exposure_cond ~ .)

На данный момент мои графики выглядят так:

enter image description here

1 Ответ

0 голосов
/ 08 марта 2019

Вы можете предварительно обработать ваши значения y, чтобы график фактически начинался с 0, а затем изменить метки шкалы, чтобы они отражали исходные значения (демонстрация со встроенным набором данных):

library(dplyr)
library(ggplot2)

cut.off = 500                                            # (= 1 in your use case)

diamonds %>%
  filter(clarity %in% c("SI1", "VS2")) %>%
  count(cut, clarity) %>%
  mutate(n = n - cut.off) %>%                            # subtract cut.off from y values
  ggplot(aes(x = cut, y = n, fill = cut)) +
  geom_col() +
  geom_text(aes(label = n + cut.off,                     # label original values (optional)
                vjust = ifelse(n > 0, 0, 1))) +
  geom_hline(yintercept = 0) +
  scale_y_continuous(labels = function(x) x + cut.off) + # add cut.off to label values
  facet_grid(clarity ~ .)

plot

...