Ini plot yang bisa saya buat:

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

Namun, fungsi timbangan "gratis" luar biasa, saya ingin membuat dua spesifikasi / penyesuaian ini:

  1. Sumbu y dimulai pada 0

  2. Tingkatkan batas Atas Y ~ 10% sehingga saya memiliki ruang untuk menambahkan beberapa anotasi nanti (nilai-P, dll.) Di Photoshop.

Strategi alternatif mungkin membuat individu plot dan mengumpulkannya bersama-sama, ini menjadi sedikit membosankan dengan banyak elemen facet.

1
Daniel Zhang 3 Juni 2021, 02:35

1 menjawab

Jawaban Terbaik

Pertama, reproduksibilitas dengan data acak membutuhkan benih. Saya mulai menggunakan set.seed(42), tetapi itu menghasilkan nilai-nilai negatif yang menyebabkan peringatan yang sama sekali tidak terkait. Menjadi sedikit malas, saya mengubah benih menjadi set.seed(2021), menemukan semua positif.

Untuk # 1, kita dapat menambahkan limits=, di mana bantuan untuk ?scale_y_continuous mengatakan itu

  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()').

Jadi kita akan menggunakan c(0, NA).

Untuk Q2, kami akan menambahkan expand=, didokumentasikan di tempat yang sama.

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 Juni 2021, 00:28