Это действительно интересно, потому что это на самом деле сложнее, чем кажется на первый взгляд.Одна вещь, которая бросается в глаза, это получение уникальных пар экспериментов - кажется, что вы хотите vs b, но не обязательно b v a a.Для этого вам понадобится уникальный набор экспериментальных пар.
Изначально я пытался работать с вашими данными gather
, но понял, что проще начать с широкой версии.Возьмите названия экспериментов из имен столбцов - вы можете сделать это несколькими способами, но я просто взял строки, которые не "names"
, - и получите их комбинации.Я склеил их вместе, чтобы сделать их немного легче в работе.
library(dplyr)
library(tidyr)
library(ggplot2)
df <- data.frame(
names=letters,
a=1:26,
b=1:13,
c=11:36
) %>%
as_tibble()
exp <- stringr::str_subset(names(df), "names", negate = T)
pairs <- combn(exp, 2, paste, simplify = F, collapse = ",") %>%
unlist()
pairs
#> [1] "a,b" "a,c" "b,c"
Затем для каждой пары извлеките имена связанных столбцов, сделайте небольшое прибавление, чтобы выбрать эти столбцы, выполните преобразование log2
что у тебя было.Мне пришлось объездить здесь, чтобы переименовать столбцы с чем-то, на что я мог бы сослаться - я думаю, что в этом нет необходимости, но я не мог заставить мой тидевал работать внутри ggplot
aes
.Кто-то еще может иметь представление об этом.Затем создайте свой сюжет и соответственно пометьте оси и заголовок.Таким образом, у вас будет список из 3 графиков.
plots <- purrr::map(pairs, function(pair) {
cols <- strsplit(pair, split = ",", fixed = T)[[1]]
df %>%
select(names, !!cols[1], !!cols[2]) %>%
mutate_at(vars(-names), log2) %>%
rename(exp1 = !!cols[1], exp2 = !!cols[2]) %>%
ggplot(aes(x = exp1, y = exp2)) +
geom_point() +
labs(x = cols[1], y = cols[2], title = pair)
})
Используйте свой метод выбора, чтобы составить графики так, как вы хотите.Я пошел с cowplot
, но мне также нравится пакет patchwork
.
cowplot::plot_grid(plotlist = plots, nrow = 1)
![](https://i.imgur.com/5Ok7ZJV.png)