提高重叠片段可视化的性能

2023-12-21

我有一组 x 点对,用于沿 x 轴绘制线段,以在 R 中创建自定义读取映射:

绘制这些线段的一半任务是确定它们的 y 位置,以便没有两个重叠的线段位于同一 y 水平上。对于每个段,我从第一个位置迭代 y 个级别,直到到达尚未包含与当前段重叠的段的位置。然后,我记录当前片段的结束位置并移至下一个片段。

实际代码是一个函数,如下:

# Dummy data
# A list of start and end positions for each segment along the X axis. Sorted by start.
# Passing the function few.reads draws a map in half a second. Passing it many.reads takes about half an hour to complete.
few.reads <- data.frame( start=c(rep(10,150), rep(16,100), rep(43,50)), end=c(rep(30,150), rep(34,100), rep(57,50)) );
many.reads <- data.frame( start=c(rep(10,15000), rep(16,10000), rep(43,5000)), end=c(rep(30,15000), rep(34,10000), rep(57,5000)) );

#---
# A function to draw a series of overlapping segments (or "reads" in my along
# The x-axis. Where reads overlap, they are "stacked" down the y axis
#---
drawReads <- function(reads){

    # sort the reads by their start positions
    reads <- reads[order(reads$start),];

    # minimum and maximum for x axis
    minstart <- min(reads$start);
    maxend <- max(reads$end);

    # initialise yread: a list to keep track of used y levels
    yread <- c(minstart - 1);
    ypos <- c(); #holds the y position of the ith segment

    #---
    # This iteration step is the bottleneck. Worst case, when all reads are stacked on top
    # of each other, it has to iterate over many y levels to find the correct position for
    # the later reads
    #---
    # iterate over segments
    for (r in 1:nrow(reads)){
        read <- reads[r,];
        start <- read$start;
        placed <- FALSE;

        # iterate through yread to find the next availible
        # y pos at this x pos (start)
        y <- 1;
        while(!placed){

            if(yread[y] < start){
                ypos[r] <- y;
                yread[y] <- read$end;
                placed <- TRUE;
            } 

            # current y pos is used by another segment, increment
            y <- y + 1;
            # initialize another y pos if we're at the end of the list
            if(y > length(yread)){
                yread[y] <- minstart-1;
            }
        }
    }

    #---
    # This is the plotting step
    # Once we are here the rest of the process is very quick
    #---
    # find the maximum y pos that is used to size up the plot
    maxy <- length(yread);
    miny = 1;


    reads$ypos <- ypos + miny;

    print("New Plot...")
    # Now we have all the information, start the plot
    plot.new();
    plot.window(xlim=c(minstart, maxend+((maxend-minstart)/10)), ylim=c(1,maxy));

    axis(3,xaxp=c(minstart,maxend,(maxend-minstart)/10));
    axis(2, yaxp=c(miny,maxy,3),tick=FALSE,labels=FALSE);

    print("Draw the reads...");
    maxy <- max(reads$ypos);
    segments(reads$start, maxy-reads$ypos, reads$end, maxy-reads$ypos, col="blue");   
}

我的实际数据集非常大,据我所知,包含的区域最多可以有 600000 个读数。读取自然会堆叠在一起,因此很容易实现最坏的情况,即所有读取都相互重叠。绘制大量读取所需的时间对我来说是不可接受的,因此我正在寻找一种方法来提高该过程的效率。我可以用更快的东西替换我的循环吗?有没有一种算法可以更快地安排读取?目前我真的想不出更好的方法来做到这一点。

感谢您的帮助。


以贪婪的方式填充每个 y 层。满了一层后,就下降一层,并且永远不会再上升。

伪代码:

 y <- 1
 while segment-list.not-empty
   i <- 1
   current <- segment-list[i]
   current.plot(y)
   segment-list.remove(i)
   i <- segment-list.find_first_greater(current.end)
   while (i > 0)
     current <- segment-list[i]
     current.plot(y)
     segment-list.remove(i)
   y <- y + 1

这不一定会产生任何意义上的“最佳”图,但至少是 O(n log n)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

提高重叠片段可视化的性能 的相关文章

  • 在 MySQL 数据库中保持 TEXT 字段唯一的最佳方法

    我想让 TEXT 字段的值在我的 MySQL 表中唯一 经过小型研究 我发现由于性能问题 每个人都不鼓励在 TEXT 字段上使用 UNIQUE INDEX 我现在想用的是 1 创建另一个字段来包含 TEXT 值的哈希值 md5 text v
  • 是否有weighted.median()函数?

    我正在寻找类似形式的东西weighted mean 我通过搜索找到了一些解决方案 这些解决方案写出了整个函数 但希望有一些更用户友好的解决方案 以下软件包都有计算加权中位数的函数 aroma light isotone limma cwhm
  • R 中的数据框操作 - 将单元格向左移动并删除 NA

    我有一个数据框 其列由随机分布的值和 NA 组成 如下所示 a lt c S E NA S NA b lt c A NA M G K c lt c I NA NA NA L meh lt dataframe a b c 1 2 3 4 5
  • 如何在R中分离两个图?

    每当我运行这段代码时 第一个图就会简单地覆盖前一个图 R中有没有办法分开得到两个图 plot pc title main abc xlab xx ylab yy plot pcs title main sdf xlab sdf ylab x
  • R 颜色 - 许多独特的颜色仍然很漂亮

    我很好奇你是否有一些关于 R 中颜色酿造的技巧 对于许多独特的颜色 在某种程度上图形仍然好看 我需要相当数量的独特颜色 至少 24 种 可能需要更多 50 种 用于堆叠区域图 所以不是热图 渐变颜色不起作用 我发现了 viridis 它的调
  • 在什么情况下 do-while 比 while 更高效?

    while 与 do while while 和 do while 在功能上是等效的当块为空时 虽然 while 看起来更自然 do while keepLooping while keepLooping 使用空块的 while do wh
  • 计算字符串向量中连续数字的函数

    我想创建一个函数 它接受至少 1 个元素的字符串对象并包含数字 2 到 5 并确定是否存在至少 N 长度的连续数字 其中 N 是实际数字值 如果是 则返回字符串 true 否则返回字符串 false 例如 Input 555123 Outp
  • 依赖解析算法

    我正在编写一个包管理器 为此我希望依赖项解析尽可能强大 每个包都有一个版本列表 每个版本包含以下信息 具有可比性的 ID 依赖关系 软件包列表以及每个软件包的一组可接受的版本 冲突 软件包列表以及每个软件包的一组与该版本一起导致问题的版本
  • 使用非标准评估公式

    我正在创建一个使用的包非标准评价 http adv r had co nz Computing on the language html跟踪列的含义 该包在函数之间传递数据框 这些函数执行同一组列的各种操作 非标准评估对此非常有用 my s
  • 上传到 Shiny 服务器后在 R 中解压文件

    我正在尝试在我们的本地服务器上使用 Shiny 来构建一个应用程序 允许用户上传包含 ESRI shapefile 和关联文件的 zip 文件 Shiny 服务器的 fileInput 可以获取数据 并且当它这样做时 它会将其存储在临时目录
  • 使用操作按钮在闪亮的 R 中添加包含现有数据框的新行

    我正在构建一个闪亮的表单 它将从 textInput 字段获取数据 并将这些输入与文本文件 将通过文件输入上传 组合起来 并在主面板中显示输出 有一个操作按钮用于第一次更新数据 从文本输入中获取数据并与处理后的文本文件合并 我添加了另一个操
  • 将文件名附加到 R 中的数据框

    我想将文件名附加到我的表中 但它似乎并没有真正起作用 我正在做的是迭代文件名列表 打开它们 将所有数据附加到一个数据帧 对于每个附加文件 我想添加其文件名 我希望将其附加到每一行 以便稍后当我查看数据时 我会知道给定行源自哪个文件 但似乎并
  • 使用行内 r 代码作为 R markdown 标头的一部分

    我希望使用行 R 代码作为 r markdown 文件中标头的一部分 然而 当我编织文件时 标题上使用的字体是不同的 如何确保字体相同 下面是一个简单的例子 r 1 1 Header 您可以将内容括在反引号中以表示内联 r 代码 如下所示
  • 如何使用 ggplot2 将 IPCC 点画添加到全球地图

    我需要将 IPCC style 点画添加到全球地图中 如下所示这个帖子 https stackoverflow com questions 11736996 adding stippling to image contour plot 不过
  • 如何使用 python 有效地找到两个大文件的交集?

    我有两个大文件 它们的内容如下所示 134430513125296589151963957125296589 该文件包含未排序的 id 列表 某些 id 可能会在单个文件中出现多次 现在我想找到路口两个文件的一部分 这就是两个文件中都出现的
  • 找到一个数是素数,为什么检查到n/2更好。避免n后半部分的数字的原因是什么

    要检查一个数是否是素数 最简单的方法是尝试将这个数除以 2 到 n 如果任何操作得到余数为 0 那么我们就说给定的数不是素数 但最好只进行划分和检查直到 n 2 我知道更好的方法是直到 sqrt n 我想知道跳过后半部分的原因 假设我们是否
  • 如何改变HTML5视频的播放速度?

    如何更改 HTML5 中的视频播放速度 我查过视频标签的属性 https www w3schools com html html5 video asp在 w3school 但无法做到这一点 根据这个网站 http www chipwreck
  • 用于安装 R 软件包的备用编译器:clang:错误:不支持的选项“-fopenmp”

    我正在尝试在 OS X 10 11 6 上使用 R 版本 3 4 0 安装 rJava 包 install packages rJava type source 我收到以下错误 clang o libjri jnilib Rengine o
  • 使用 dplyr 对连续变量进行分类[重复]

    这个问题在这里已经有答案了 我想基于连续数据创建一个具有 3 个任意类别的新变量 set seed 123 df lt data frame a rnorm 100 使用基地我会 df category df a lt 0 5 lt low
  • 优先连接,Matlab 中的复杂网络

    大家好 我现在正在 MATLAB 中研究优先附件模型 在理解以下内容时遇到一些困难 假设我一开始有 4 个节点 连接如下 time 0 1 lt gt 2 3 lt gt 4 在下一个时间步骤中 我添加一个节点和 4 个连接 然后添加另一个

随机推荐

  • 将多个函数 onchange 从 javascript 添加到同一输入

    我想将多个函数 onchange 从 javascript 添加到同一输入 有些人这样认为 this el document getElementById this docID if x y this el onchange functio
  • Java Puzzler - 原因是什么? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我写了以下
  • 自定义Android Webview类

    我正在编写一个 Android 应用程序 android 2 3 3 API 10 我通过 WebView 加载网站 查看android webkit webview源码 具体是onSavePassword 可以找到HERE http gr
  • Apache 不生成 404

    如果我有 faq php在服务器上也可以通过以下方式访问 faq php nonexistant gif为什么 我已确保多视图已禁用 为什么内容 faq php当我访问 URI 时显示 faq php randomstuff gif 仅供参
  • 在焦点上打开 jQuery UI ComboBox

    我有一个 jQuery ComboBox 输入 当聚焦时我想自动打开自动完成菜单 但是 只需清除输入并将其聚焦 如下所示 select id val focus 不起作用 如果您手动聚焦自动完成输入然后将其清除 它会显示自动完成菜单 有没有
  • Flutter:将整数列表转换为一个衬里中的字符串列表

    我试图将 JSON 解析为我的对象 json 的一个字段包含 1 2 3 4 它是一个 int 列表 但我的对象字段包含List
  • 如何使用 KaTeX 渲染 $..$ 中的所有内联公式?

    所以我想要 KaTeX 内联公式 就像 MathJax 一样 但到目前为止我只发现render 将字符串 绘制 到元素的函数 我需要修改 DOM 中文本节点的一部分 我真的找不到如何用 KaTeX 做到这一点 有这样的功能吗 MathJax
  • 将 media_ids 添加到 Twitter API 调用会导致身份验证问题

    我有一个简单的网页 可以通过 Twitter REST API 创建纯文本推文 https api twitter com 1 1 statuses update json https api twitter com 1 1 statuse
  • 完全卸载 VS Code 扩展

    自最新版本的 VS Code 以来 每当打开 C 文件时都会出现错误 我已经安装了由 OmniSharp 提供支持的 csharp 语言扩展 这是我得到的错误 我尝试卸载扩展并重新安装它 同样的问题 我完全卸载了该应用程序并重新安装了它 但
  • 在 Android 中获取我拨打的号码

    我需要以编程方式从 Android 设备获取正在拨打的号码 我现在正在做的事情如下 我听android intent action PHONE STATE被广播意味着我正在被呼叫或正在呼叫 或接收短信等 In a BroadcastRece
  • XML 和 JSON Web api:从 POJO 自动映射?

    我即将开始一个小项目 其目标是最终得到一个 Web xml json api 我将用 Java 编写它 并使用 Restlet 库 如何处理 xml json 二元性 我知道我可以使用 JAXB 将 pojos 转换 为 xml 并返回 但
  • 在 python 正则表达式中使用 OR 的最佳方法是什么

    我正在做关于正则表达式的作业 并且遇到一些困难OR 给定以下字符串 avc7fsrd5vcc12vfscsrwt1qw7eetrs fsrsy 应该返回 t1 s fdjhads jhf 5672t3zcxvb m654godjhfjdye
  • 无法签入 TFS 并使用持续集成进行构建'

    我昨天将一个 Azure Web 应用程序签入 TFS 没有出现任何问题 签入后 资源管理器将注入我们的 nuget 包 如果构建成功则进行部署 I made a few changes added a class and checked
  • 将示例项目导入到eclipse中

    我知道这可能是一个菜鸟问题 但我以前没有这样做过 如何导入 android 示例项目 例如 https developer android com training location retrieve current html https
  • 将 Uncrustify 与 VIM 结合使用

    在我的 vimrc 中 我通过以下命令调用 Uncrustify uncrustify l CPP c D uncrustify default cfg 之后在一些代码上我收到一个 Windows Fatal 错误 但是当我使用 f 选项在
  • Liquibase 多个变更日志执行

    我在用着SpringLiquibase对于 liquibase 配置 以下配置适用于单个变更日志文件 sql 格式 Configuration Slf4j public class LiquibaseConfiguration Inject
  • 通过 SSIS 上传之前验证数据

    我有一个 SSIS 包 用于将 Excel 文件中的数据上传到 Sql Server 2005 表中 Excel 文件将包含 20k 30k 行范围内的不同行数据 当所有数据正确时 上传工作正常 但当即使在单行中出现小问题时 显然也会失败
  • 将 JavaScript 对象进行 AND 运算

    我在我们的应用程序中遇到了这段代码 已修改 并对它的工作原理感到困惑 function someObject this someProperty this foo bar baz function return Huh this getVa
  • Spark 结构化流 - 由于输入源数量增加而导致检查点中出现断言错误

    我正在尝试将两个流合并为一个并将结果写入一个主题 代码 1 阅读两个主题 val PERSONINFORMATION df DataFrame spark readStream format kafka option kafka boots
  • 提高重叠片段可视化的性能

    我有一组 x 点对 用于沿 x 轴绘制线段 以在 R 中创建自定义读取映射 绘制这些线段的一半任务是确定它们的 y 位置 以便没有两个重叠的线段位于同一 y 水平上 对于每个段 我从第一个位置迭代 y 个级别 直到到达尚未包含与当前段重叠的