R 中的基因表达谱图

Gene Expression Profile Plot in R

我正在尝试在 R 中绘制基因表达谱图。我的输入数据是一个数据框,其中第 1 列有基因名称,接下来 column2:18 是多种癌症类型。下面是一组小数据。

我想要的是制作一个图表,该图表在 x 轴和每个基因的 y=轴表达线中具有样本。 看起来像这样的东西。

但不是 x 轴上的时间点,它应该有癌症类型(列) 到目前为止,我已经尝试了 ggplot()geneprofiler() 但我一次又一次地失败了。

任何帮助将不胜感激。

数据格式

数据的当前格式称为宽格式,但ggplot需要长格式数据。 tidyr 包(tidyverse 的一部分)具有在宽格式和长格式之间转换的功能。在这种情况下,您需要函数 tidyr::pivot_longer。例如,如果您在名为 df_gene_expr 的 data.frame(或小标题)中有数据,则枢轴将类似于

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 是否完全合适 - 它是根据 continuous-continuous 数据设计的。相反,我建议 stat_summary.

这里有一个小技巧,因为 x-axis 上的离散 cancer_type。即,cancer_type 变量应该是 factor,但我们将在 stat_summary 中使用 x-values 的底层代码。否则,它会抱怨使用 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))) 可以 equally-well 应用于 geom_smooth,但我认为使用 stat_summary 仍然更有意义,让我们一个明确地选择要计算的统计数据。例如,在这种情况下,median 而不是 mean 可能更适合汇总函数。