use*_*000 2 plot r vector bioinformatics ggplot2
我真的需要你的 R 技能。已经研究这个情节好几天了。我是 R 新手,所以这可以解释它。
我有染色体的序列覆盖数据(基本上是每个染色体长度上每个位置的值,使向量的长度达到数百万)。我想为我的阅读内容制作一个很好的覆盖图。这是我到目前为止得到的:

看起来不错,但我缺少 y 标签,这样我就可以知道它是哪条染色体,而且我在修改 x 轴时也遇到了麻烦,所以它在覆盖范围结束的地方结束。此外,我自己的数据要大得多,使得这个图特别需要很长时间。这就是我尝试这个 HilbertVisplotLongVector 的原因。它有效,但我不知道如何修改它、x 轴、标签、如何记录 y 轴,以及矢量在绘图上都获得相同的长度,即使它们的长度不相等。
source("http://bioconductor.org/biocLite.R")
biocLite("HilbertVis")
library(HilbertVis)
chr1 <- abs(makeRandomTestData(len=1.3e+07))
chr2 <- abs(makeRandomTestData(len=1e+07))
par(mfcol=c(8, 1), mar=c(1, 1, 1, 1), ylog=T)
# 1st way of trying with some code I found on stackoverflow
# Chr1
plotCoverage <- function(chr1, start, end) { # Defines coverage plotting function.
plot.new()
plot.window(c(start, length(chr1)), c(0, 10))
axis(1, labels=F)
axis(4)
lines(start:end, log(chr1[start:end]), type="l")
}
plotCoverage(chr1, start=1, end=length(chr1)) # Plots coverage result.
# Chr2
plotCoverage <- function(chr2, start, end) { # Defines coverage plotting function.
plot.new()
plot.window(c(start, length(chr1)), c(0, 10))
axis(1, labels=F)
axis(4)
lines(start:end, log(chr2[start:end]), type="l")
}
plotCoverage(chr2, start=1, end=length(chr2)) # Plots coverage result.
# 2nd way of trying with plotLongVector
plotLongVector(chr1, bty="n", ylab="Chr1") # ylab doesn't work
plotLongVector(chr2, bty="n")
Run Code Online (Sandbox Code Playgroud)
然后我有另一个特别感兴趣的载体,称为基因。它们与染色体向量的长度大致相同,但在我的数据中,它们包含的零多于值。
genes_chr1 <- abs(makeRandomTestData(len=1.3e+07))
genes_chr2 <- abs(makeRandomTestData(len=1e+07))
Run Code Online (Sandbox Code Playgroud)
我想将这些基因载体绘制为染色体下方的红点!基本上,如果向量有一个值 (>0),它会在长向量图下显示为点(或线)。这个我不知道如何添加!但这似乎相当简单。
请帮我!太感谢了。
免责声明:请不要简单地复制并粘贴此代码来运行染色体的整个位置。请对位置进行采样(例如,如@Gx1sptDTDa所示)并绘制它们。否则,如果您的计算机在排水中幸存下来,您可能会在许多小时后得到一个巨大的黑色填充矩形。
使用ggplot2,这确实很容易实现geom_area。在这里,我生成了 3 个染色体 300 个位置的一些随机数据,只是为了展示一个例子。我希望你能以此为基础。
# construct a test data with 3 chromosomes and 100 positions
# and random coverage between 0 and 500
set.seed(45)
chr <- rep(paste0("chr", 1:3), each=100)
pos <- rep(1:100, 3)
cov <- sample(0:500, 300)
df <- data.frame(chr, pos, cov)
require(ggplot2)
p <- ggplot(data = df, aes(x=pos, y=cov)) + geom_area(aes(fill=chr))
p + facet_wrap(~ chr, ncol=1)
Run Code Online (Sandbox Code Playgroud)