我试图在R中绘制基因表达剖面图,我输入的数据是一个数据框架,其中第1列有基因名,下一栏2:18是多种癌症类型。这是一小部分数据。

我想要的是做一个图,在x轴上和每个基因的y=axis表达线上都有样本。像这样的东西。

但是,与x轴上的时间点不同,它应该有巨蟹座类型(列),到目前为止,我已经尝试过、ggplot()、和,但是我一次又一次地失败了。
任何帮助都将不胜感激。
发布于 2020-08-05 20:51:11
数据格式
数据的当前格式称为wide format,但ggplot需要长格式数据。tidyr包(tidyverse的一部分)具有在宽格式和长格式之间进行转换的功能。在本例中,您需要函数tidyr::pivot_longer。例如,如果您在一个名为data.frame (或tibble)的df_gene_expr中拥有数据,则支点将类似于
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。
这有一个小窍门,因为x轴上的离散cancer_type。也就是说,cancer_type变量应该是一个factor,但是我们将为stat_summary中的x值使用底层代码。否则,它会抱怨使用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更有意义,让我们显式地选择要计算的stat。例如,在这个上下文中,median可能更适合于摘要函数,而不是mean。
https://stackoverflow.com/questions/63269006
复制相似问题