Voici l'intrigue que je peux faire:

data <- data.frame(Patient = rep(seq(1, 5, 1), 2),
                   Treatment = c(rep("Pre", 5), rep("Post", 5)),
                   Gene.1 = c(rnorm(5, 10, 5), rnorm(5, 50, 5)),
                   Gene.2 = c(rnorm(5,10,5), rnorm(5, 10, 5)))

data %>%
  gather(Gene, Levels, -Patient, -Treatment) %>%
  mutate(Treatment = factor(Treatment, levels = c("Pre", "Post"))) %>%
  mutate(Patient = as.factor(Patient)) %>%
  ggplot(aes(x = Treatment, y = Levels, color = Patient, group = Patient)) +
  geom_point() +
  geom_line() +
  facet_wrap(. ~ Gene, scales = "free") +
  theme_bw() +
  theme(panel.grid = element_blank())

Example plot

La fonction «GRATUITE» Balance est merveilleuse, cependant, je voudrais effectuer ces deux spécifications / ajustements:

  1. Y axe Y commence à 0

  2. Augmentez la limite supérieure de Y par ~ 10% de sorte que j'ai un espace pour ajouter des annotations plus tard (valeurs P, etc.) dans Photoshop.

Une stratégie alternative peut être de faire les parcelles individuelles et de les assembler ensemble, cela devient un peu fastidieux avec de nombreux éléments de facettes.

1
Daniel Zhang 3 juin 2021 à 02:35

1 réponse

Meilleure réponse

Premièrement, la reproductibilité avec des données aléatoires a besoin d'une graine. J'ai commencé à utiliser set.seed(42), mais qui a généré des valeurs négatives qui ont provoqué des avertissements complètement non liés. Être un peu paresseux, j'ai changé la graine en set.seed(2021), trouvant tous les positifs.

Pour # 1, nous pouvons ajouter limits=, où l'aide pour ?scale_y_continuous dit que

  limits: One of:

            • 'NULL' to use the default scale range

            • A numeric vector of length two providing limits of the
              scale. Use 'NA' to refer to the existing minimum or
              maximum

            • A function that accepts the existing (automatic) limits
              and returns new limits Note that setting limits on
              positional scales will *remove* data outside of the
              limits. If the purpose is to zoom, use the limit argument
              in the coordinate system (see 'coord_cartesian()').

Nous allons donc utiliser c(0, NA).

Pour Q2, nous ajouterons expand=, documenté au même endroit.

data %>%
  gather(Gene, Levels, -Patient, -Treatment) %>%
  mutate(Treatment = factor(Treatment, levels = c("Pre", "Post"))) %>%
  mutate(Patient = as.factor(Patient)) %>%
  ggplot(aes(x = Treatment, y = Levels, color = Patient, group = Patient)) +
  geom_point() +
  geom_line() +
  facet_wrap(. ~ Gene, scales = "free") +
  theme_bw() +
  theme(panel.grid = element_blank()) +
  scale_y_continuous(limits = c(0, NA), expand = expansion(mult = c(0, 0.1)))

enter image description here

0
r2evans 3 juin 2021 à 00:28