График профиля экспрессии генов в R - PullRequest
2 голосов
/ 05 августа 2020

Я пытаюсь создать график ПРОФИЛЯ ЭКСПРЕССИИ гена в R. Мои входные данные - это фрейм данных, в котором столбец 1 содержит имена генов, а следующий столбец 2: 18 - несколько типов рака. Вот небольшой набор данных.

enter image description here

what I want is to make a graph that has samples on x-axis and from y=axis expression line of each gene. something that looks like this. введите описание изображения здесь

, но вместо временных точек на оси x он должен иметь типы рака (столбцы), которые я пробовал ggplot () и geneprofiler () но я терпел неудачу снова и снова.

любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 05 августа 2020

Формат данных

Текущий формат данных обозначается как широкий формат , но ggplot требует длинный формат данных. Пакет tidyr (часть tidyverse) имеет функции для преобразования между широким и длинным форматами. В этом случае вам нужна функция tidyr::pivot_longer. Например, если у вас есть данные в data.frame (или tibble) под названием df_gene_expr, точка поворота будет go что-то вроде

library(tidyverse)

df_gene_expr %>%
  pivot_longer(cols=2:18, names_to="cancer_type", values_to="gene_expr") %>%
  filter(ID == "ABCA8") %>%
  ggplot(aes(x=cancer_type, y=gene_expr)) +
  geom_point()

, где здесь мы выделяем один ген "ABCA8" . Измените geom_point() на любую геометрию, которую вы действительно хотите (возможно, geom_bar(stat='identity').

Дискретная линия тренда

Я не уверен, что geom_smooth полностью подходит - он разработан с учетом непрерывно-непрерывных данных. Вместо этого я бы рекомендовал stat_summary.

Здесь есть небольшая хитрость, потому что дискретное cancer_type на оси x. А именно, переменная cancer_type должна быть factor, но мы будем использовать базовые коды для значений x в stat_summary. В противном случае он будет жаловаться, что использование geom='line' не имеет смысла.

Что-то вроде:

ggplot(df_long, aes(x=cancer_type, y=gene_expr)) +
  geom_hline(yintercept=0, linetype=4, color="red") +
  geom_line(aes(group=ID), size=0.5, alpha=0.3, color="black") +
  stat_summary(aes(x=as.numeric(cancer_type)), fun=mean, geom='line',
               size=2, color='orange')

Вывод из поддельных данных введите описание изображения здесь

Технически тот же трюк (aes(x=as.numeric(cancer_type))) может быть одинаково хорошо применен к geom_smooth, но я думаю, что все же имеет смысл использовать stat_summary, который позволяет явно выбирать статистику, которая будет вычислено. Например, возможно, median вместо mean может быть более подходящим в этом контексте для функции сводки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...