绘制基因表达值并添加更平滑的线
Posted
技术标签:
【中文标题】绘制基因表达值并添加更平滑的线【英文标题】:Plotting gene expression values and adding a smoother line 【发布时间】:2018-11-04 23:43:27 【问题描述】:我想根据基因的表达值绘制基因簇。我的矩阵在融化(使用reshape
)原始数据框后是这样的:
time gene value
A1.01 TMCS09g1008676 0.423176672
A1.02 TMCS09g1008676 0.911415197
A1.03 TMCS09g1008676 1.042786687
A1.04 TMCS09g1008676 0.859630996
A1.05 TMCS09g1008676 0.624891793
A1.01 TMCS09g1008677 0.304568066
A1.02 TMCS09g1008677 1.134582618
A1.03 TMCS09g1008677 1.626528999
A1.04 TMCS09g1008677 1.778379422
A1.05 TMCS09g1008677 1.922418792
A1.01 TMCS09g1008678 0.312127815
A1.02 TMCS09g1008678 0.567599868
A1.03 TMCS09g1008678 1.37594692
A1.04 TMCS09g1008678 1.655878776
A1.05 TMCS09g1008678 1.720470659
我想要做的是在 x 轴上绘制时间(5 个时间点),在 y 轴上绘制值(表达式值),因此有 3 条线并添加一条更平滑的线。
我尝试使用this 帖子中写的内容,但出现此错误Error: Discrete value supplied to continuous scale
我打电话给ggplot
如下:
ggplot(mydata, aes(as.factor(time), value)) +
geom_hline(yintercept = 0, linetype = 2, color = "red") +
# Line for each gene
geom_line(aes(group = gene), size = 0.5, alpha = 0.3, color = "blue") +
# Trend line
geom_smooth(size = 2, se = FALSE, color = "orange") +
scale_x_continuous(breaks = factor(prova$time)) +
theme_classic()
【问题讨论】:
您的错误来自scale_x_continuous
,请改用scale_x_discrete
谢谢!虽然它仍然没有增加任何平滑度
【参考方案1】:
您在使用连续与离散 x 轴时遇到问题,因为您的时间是一个字符,LOESS 平滑没有意义。相反,您可以提取与 time
关联的数字,将其转换为数字,然后将其放在 x 轴上,这样您就可以在那里获得连续的刻度。然后,您可以选择更改标签以重新创建“A1.04”样式标签。我使用sprintf
完成了此操作,但我可能没有得到您需要的完整模式。
library(tidyverse)
df %>%
mutate(time2 = str_extract(time, "(?<=\\.)\\d+$") %>% as.numeric()) %>%
ggplot(aes(x = time2, y = value)) +
geom_line(aes(group = gene), size = 0.5, alpha = 0.3, color = "blue") +
geom_smooth(method = loess, se = F, color = "orange") +
geom_hline(yintercept = 0, linetype = 2, color = "red") +
scale_x_continuous(labels = function(x) sprintf("A1.%02d", x))
由reprex package (v0.2.0) 于 2018 年 5 月 25 日创建。
【讨论】:
【参考方案2】:我想这就是你要找的,5 个时间点,3 个组?你真的没有很多数据来做 loess() 平滑。
GG = ggplot(mydata, aes(x = as.factor(time), y = value, group = gene))+
geom_hline(yintercept = 0, linetype = 2, color = "red") +
# Line for each gene
geom_line(aes(group = gene), size = 0.5, alpha = 0.3, color = "blue") +
geom_line(stat = 'smooth', method = 'loess', span = 2, size = 2, color = 'orange')+
# Trend line
scale_x_discrete(breaks = factor(mydata$time)) +
theme_classic()
【讨论】:
以上是关于绘制基因表达值并添加更平滑的线的主要内容,如果未能解决你的问题,请参考以下文章