如何简化包含大量数据点的矢量图形

如何简化包含大量数据点的矢量图形

在基因组学领域,人们经常会制作一种称为曼哈顿图的东西,它由代表数百万个 p 值的点组成:

在此处输入图片描述

以矢量格式显示的速度非常慢,一些查看器根本无法处理它,但在这种情况下,光栅图像更容易打开,但当然我们更喜欢矢量图形;)。

在图的底部,我们可以看到点的密度非常高,我们可以将它们连接成一个填充区域,这将极大地减轻计算负担。

如何在 TeX 中做到这一点?正如其中一个答案所建议的那样,应该可以在矢量图形编辑器中获得附近点的并集,但这需要大量工作。理想情况下,人们希望将每个点视为一条路径,并且在绘图过程中,逐点执行并集操作,这样最终整个绘图将得到最大程度的简化。

答案1

我不知道你的 R 表达式到底有什么用。不过,这里有一个包含 50,000 个点的类似解决方案。使用xelatexlatex-> dvips->运行它ps2pdf

\documentclass{article}
\usepackage{pst-plot}

\begin{document}

\begin{pspicture}(10,14)
\psset{xunit=0.5}
\psaxes[Dx=2](23,10)
\psplot[plotpoints=50000,plotstyle=dots,dotscale=0.5]{0.01}{23}
   [3 srand]{ x cvi 2 mod 0 eq {0 setgray}{0.5 setgray}ifelse 
              Rand log neg 2 mul 0.6 sub }
\psline[linecolor=blue](0,5)(23,5)
\psline[linecolor=red](0,8)(23,8)
\end{pspicture}

\end{document}

在此处输入图片描述

答案2

我的建议是使用矢量编辑程序打开输出文件,选择每个区域的绘制点,然后取它们的交点。这样做会为每个绘图区域的周长留下一个矢量。

这假设文件中的点被渲染为小的重叠圆圈,而不是具有某些相应直径的点。

我同意 David 和 Ruedi 的观点,图像只需要简化一次,而不是在编译文档时重复处理。

答案3

这不是一个 LaTeX 解决方案,但我最近发现了一种使用 R 包将中等大小的曼哈顿图作为矢量图形导出为 PDF 的方法sfggplot2. 然后可以轻松地将它们包含在 LaTeX 文档中。

与@Steven Endres 建议的类似,我的方法是对重叠点进行合并,以降低最终图形的复杂性(由大部分重叠点组成的大区域对于每个染色体来说都变成单一形状)。

我编写了一个 R 函数,根据一组汇总统计数据绘制这些简化的曼哈顿图可在 GitHub 上获取。该 repo 还包含一个可重现的示例。

相关内容