R

R,r,ggplot2,bioinformatics,R,Ggplot2,Bioinformatics,我试图在R中绘制基因表达谱图。我的输入数据是一个数据框,其中第1列有基因名称,下一列2:18是多种癌症类型。下面是一组小数据 我想要的是制作一个在x轴和y轴上都有样本的图,每个基因的表达线。 看起来像这样的东西。 但它应该有癌症类型(列),而不是x轴上的时间点 到目前为止,我已经尝试了ggplot()和geneprofiler(),但一次又一次失败 任何帮助都将不胜感激。数据格式 数据的当前格式称为宽格式,但ggplot需要长格式数据。tidyr包(属于tidyverse的一部分)具有在宽格

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

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

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

任何帮助都将不胜感激。

数据格式 数据的当前格式称为宽格式,但
ggplot
需要长格式数据。
tidyr
包(属于
tidyverse
的一部分)具有在宽格式和长格式之间转换的功能。在本例中,您需要该函数。例如,如果您在一个名为
df_gene_expr
的data.frame(或tibble)中有数据,那么枢轴将类似于

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_点()


离散趋势线 我不确定
geom\u smooth
是否完全合适-它的设计考虑了连续数据。相反,我建议使用
stat\u summary

这有一个小技巧,因为x轴上的离散的
cancer\u type
。也就是说,
cancer\u type
变量应该是一个
因子
,但是我们将在
stat\u 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。例如,在这种情况下,对于summary函数来说,
median
而不是
mean
可能更合适。

ggplot
使用
geom_line()
应该可以。你尝试过什么失败了?嘿,我的数据是宽格式的,所以我遇到了问题。将其转换为长格式对我来说很有效。将宽格式转换为长格式对我来说很有效。你能帮我提取一条趋势线吗?我尝试过
geom_平滑(size=2,se=FALSE,color=“orange”)
但它向我展示了geom_smooth()`using method='leash'和公式'y~x',图形中没有趋势线。