gpt4 book ai didi

r - 如何使用 ggplot2 绘制重叠范围

转载 作者:行者123 更新时间:2023-12-04 06:19:14 25 4
gpt4 key购买 nike

我正在努力解决ggplot2 .特别是,我试图找出是否有更好(更优雅、更简单)的方式来创建 Bioconductor 中的绘图。 IRanges包装小插图(找到 here,第 12 页上的图,第 11 页上的代码)。

enter image description here

在小插图中,情节是用以下代码生成的:

plotRanges <- function(x, xlim = x, main = deparse(substitute(x)),
+ col = "black", sep = 0.5, ...) +{
+ height <- 1
+ if (is(xlim, "Ranges"))
+ xlim <- c(min(start(xlim)), max(end(xlim)))
+ bins <- disjointBins(IRanges(start(x), end(x) + 1))
+ plot.new()
+ plot.window(xlim, c(0, max(bins)*(height + sep)))
+ ybottom <- bins * (sep + height) - height
+ rect(start(x)-0.5, ybottom, end(x)+0.5, ybottom + height, col = col, ...)
+ title(main)
+ axis(1) +}

ir <- IRanges(c(1, 8, 14, 15, 19, 34, 40),
+ width = c(12, 6, 6, 15, 6, 2, 7))

plotRanges(ir)

堆叠条形是通过绘制矩形创建的,并且必须计算每个矩形的角点、高度和宽度这一事实让我觉得不是很优雅, ggplot2有更优雅的方式来做到这一点吗?我知道“优雅”不是一个非常精确的描述,但我希望你明白我的意思(如果不是,我会尽量解释得更好)。

最佳答案

这是一种使用 ggplot2 生成类似图的方法.我使用了IRanges的示例数据.

library(IRanges)   

# example data
ir <- IRanges(c(1, 8, 14, 15, 19, 34, 40),
width = c(12, 6, 6, 15, 6, 2, 7))
# IRanges of length 7
# start end width
# [1] 1 12 12
# [2] 8 13 6
# [3] 14 19 6
# [4] 15 29 15
# [5] 19 24 6
# [6] 34 35 2
# [7] 40 46 7

bins <- disjointBins(IRanges(start(ir), end(ir) + 1))
# [1] 1 2 1 2 3 1 1

dat <- cbind(as.data.frame(ir), bin = bins)

library(ggplot2)
ggplot(dat) +
geom_rect(aes(xmin = start, xmax = end,
ymin = bin, ymax = bin + 0.9)) +
theme_bw()

enter image description here

关于r - 如何使用 ggplot2 绘制重叠范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21506724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com