我有一个数据矩阵(96cols x >5000rows),其中每个值都在-1和+1之间。我编写了一个脚本来生成 SVG 格式的热图,但是我的真实数据集的 SVG 文件大小变得很大。Inkscape 挣扎,渲染和屏幕更新非常缓慢。将其压缩为 svgz 也无济于事。
我采用了为每个值绘制一个矩形的方法,每个矩形有 5 个属性:x、y、宽度、高度和填充。可以想象,对于 96x5000 的值,有很多矩形。通过将每个属性转换为整数,我将文件大小从 ~34MB 减少到 ~29MB。我的另一个想法是删除填充属性并将其替换为 10-20 类中的一个,每个颜色组一个。不过,我还没有完成最后一点,因为我认为必须有更好的方法来做到这一点。
举个例子:-
<rect fill="#000000" height="14" width="10" x="50" y="81" />
在 HTML 中,我会使用一个<table>
,<tr's>
和<th's>
一个短类名或 id 引用颜色组。如果值为 0 或中间值,则不需要类名,并且<th>
可以继承预设的中性色。
虽然使用 SVG,但显然没有正式的表格规范,那么我应该怎么做呢?我目前正在考虑以下选项:-
- display 属性确实有一个(记录不充分的)inline-table 选项。显然,它可能是“来自 CSS 的意外残余”。我想这意味着
<g>
每一行都有一个 id 引用样式的display:table-row-group
. - 如此处所建议的,使用嵌套的元素作为
<text>
行。<tspan>
- 使用用 ECMASCript 编写的布局管理器。
我还简要检查了 XSLT,它看起来很强大,但很复杂,而且似乎只能在 Web 浏览器中工作。理想情况下,我希望将所有内容保存在一个可以在矢量图形编辑器中保存、查看和编辑的文件中,但不确定 XSLT 是否允许这样做。
这样做最有效的方法是什么?文件大小并不像它呈现的速度那么重要。非常感谢任何帮助。
更新:-
- 2 不能作为文本和嵌套的 tspan 没有填充或背景颜色属性。该示例使用 rect 提供背景颜色,因为 text 和 tspan 不提供任何创建填充的方法。
我还想知道行长是否可能与缓慢的渲染有关。我正在使用 Python 的(c)ElementTree 模块来生成 SVG,默认情况下它写入所有 XML 时没有一个换行符。是否可以帮助解析器/渲染器将图像的每一行分隔成 XML 中的新行?