【问题标题】:Python graphviz taking huge amount of time during rendering the pdfPython graphviz 在渲染 pdf 期间花费大量时间
【发布时间】:2022-10-23 00:38:49
【问题描述】:

我有一个包含许多节点和边的大图。我在使用 Graphviz python 包时面临的问题是渲染文件需要很多时间。

还提到了here 和here 的其他替代方案。但是我面临的问题是,它们都使用点文件,而这些方法生成的图像文件看起来不太好;我的意思是,预期的格式不是很明显。

我想要生成一个pdf文件。正在生成的大图像文件使我的 Linux 崩溃。 Linux 中的默认图像查看器无法处理它们,或者 Mozilla Firefox 虽然可以打开它,但需要大量时间才能使图像的一部分变得明显。

请任何人都可以帮助我非常快速地生成一个 pdf 文件,可以在普通的 pdf 查看器中快速查看,或者如果是图像,那么可以使用普通的图像查看器轻松查看吗?

我希望生成的图表类似于this、this 和this。 [这些是 python 为输入的子图呈现为 pdf 的图]。

对于整个图,点文件的情况就像this,命令:

$sfdp -x -Goverlap=scale -Tpng syscall > data.png
sfdp: graph is too large for cairo-renderer bitmaps. Scaling by 0.487931 to fit
tcmalloc: large alloc 3142361088 bytes == 0x558a701ce000 @  0x7f45c7679001 0x7f45c39101fa 0x7f45c39102ad 0x7f45c4a9b6df 0x7f45c4f92261 0x7f45c740f468 0x7f45c7411d53 0x558a6ee01092 0x7f45c6dc4c87 0x558a6ee0112a

它返回以下 data.png 文件,我无法在我的 Linux 系统上的任何图像查看器上正确查看该文件。而且,它与 Graphviz 渲染生成的格式(我的意思是图形的外观)不同。

对于this dot file,即使sfdp 也需要相当长的时间......

【问题讨论】:

  • 信息不足,无法真正提供帮助 请包括(或指出)您的意见。您还可以更好地描述您对结果图的不满意之处。
  • @sroush 我已经添加了相关的指针。请你现在帮忙。

标签: performance time graphviz dot graph-visualization


【解决方案1】:

不确定为什么您的设备会花这么多时间,而不是像无头鸡一样在圈子里跑来跑去,然后摔倒。

您的错误反馈应该通过报告文件对于图像来说太大来为您提供线索:

sfdp: graph is too large for cairo-renderer bitmaps. Scaling by 0.531958 to fit  
sfdp: failure to create cairo surface: out of memory  

这里是 SVG,注意大小大约是 600 平方,大约 61,598 像素 x 51,767 像素 = 大约 3GB(您的错误说 3142361088 字节不能分配内存)

任何标准的大文件,但作为 SVG,它只有 1.63 MB

sfdp -Goverlap=scale -x -Tsvg syscall -o data.svg

文件:data.svg 文件大小:1.63 MB(1,707,939 字节) 页数:1 页面尺寸:641.64 x 539.24 英寸

您可以在浏览器中打开 svg 并打印为 PDF,但是即使在需要 2 页的 A0 Landscape 上以 10% 的比例打印,您也看不到字母,因此在全尺寸情况下,这些海报页面将超过 100 个

【讨论】:

  • 请让我知道您使用的命令吗?生成这个 svg
【解决方案2】:

将此添加到您的输入文件中:graph [nslimit=2 nslimit1=2 maxiter=5000](值有些随意)
并使用此命令行dot -v -Tsvg ...(如果 svg 有效,则尝试 pdf)
我认为点最有可能生成您喜欢的图表

【讨论】:

  • 请你能解释一下这些线条的含义......以及我应该在哪里添加它们
  • *我为什么要添加它们
  • 将它们添加到文件的顶部(第一行之后)。它们应该会加快执行速度。在graphviz.org/pdf/dotguide.pdf 和graphviz.org/doc/info/attrs.html 中(轻微地)提到了它们。看看点引擎做了什么。
  • network simplex: 270700 nodes 406273 edges 2852 iter 23.61 sec Segmentation fault (core dumped) 不知道为什么,但我在运行 dot -v -Tsvg syscall > syscall.svg 时遇到了分段错误
  • 270700 个节点和 406273 条边是一个非常大的图。对点来说似乎太大了。你可能会在这里gitlab.com/graphviz/graphviz/-/issues创建一个问题,看看开发人员有没有什么想法
猜你喜欢
  • 1970-01-01
  • 2016-05-22
  • 2011-11-18
  • 2018-01-10
  • 2015-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多