使用 pgfplots 绘制浮点数据

使用 pgfplots 绘制浮点数据

pgfplots 是否支持二进制文件结构以允许加载和绘制浮点数?我知道将浮点数据转换为文本文件所需的时间很短,但对于大量数据(例如动画),处理文件的时间可能相当长。将数据从浮点格式转换,然后让 pgfplots 加载并将其转换回来,这似乎不合逻辑。此外,有人可以解释一下如何将坐标转换为 PDF 数据吗?我相信 PDF 对象可以包含 32 位浮点数。因此,是否可以将二进制文件中的浮点坐标直接放入 PDF 对象中,从而避免 2 个(或 3 个?)转换阶段(并且确实保留了无损坐标)?

我意识到二进制文件中的数据结构不如纯文本文件中的数据结构那么明显,但可以相应地操作二进制文件(或二进制文件)。我提供了一个基本示例,试图让事情变得更清楚。

\documentclass{article}
\usepackage{filecontents,pgfplotstable}
\pgfplotstableset{create on use/x/.style={create col/copy column from table={x.csv}{0}}}
\begin{filecontents}{x.csv}
1.1
1.2
1.3
\end{filecontents}
\begin{filecontents}{y1.csv}
2.5
3.2
2.9
\end{filecontents}
\begin{filecontents}{y2.csv}
2.6
3.0
3.1
\end{filecontents}
\begin{document}
\tikz{\pgfplotstableread{y1.csv}\y
\begin{axis}
\addplot table[x=x,y=0]\y;
\end{axis}}

\tikz{\pgfplotstableread{y2.csv}\y
\begin{axis}
\addplot table[x=x,y=0]\y;
\end{axis}}
\end{document}

'x.csv'、'y1.csv' 和 'y2.csv' 的内容不是上面提供的内容,而是具有以下十六进制转储的二进制文件:

文本文件

40200000 404ccccd 4039999a

y1.csv

40266666 40400000 40466666

y2.csv

3f8ccccd 3f99999a 3fa66666

答案1

您提出了两个问题,我将简要回答一下:

1 pgfplots 可以读取浮点数的二进制表示吗?

简而言之,不是。

2 坐标如何映射到 PDF 中?

这是一个相当复杂的操作:首先收集所有坐标以计算轴限值。这是“调查阶段”。之后,所有坐标都映射到 TeX/PDF/PS 的 32 位定点数范围中。这些数字以纯文本形式写入输出文件(在应用任何变换(如缩放或拉伸)之后)。


除了这些问题的答案之外,我发现您实际上正在寻找其他东西,而这些答案只是一些“副产品”。您似乎想知道如何优化某些东西;显然是加载大量动画数据文件或通过 pgfplots 进行处理。

我同意动画可能涉及足够的数据文件格式。但二进制“CSV”是否正确似乎值得怀疑。并且pgfplots作为读取“巨大动画数据文件”的工具似乎也值得怀疑。您想导入 AVI 吗?

如果您想减少 pgfplots 思考数据的时间,您应该提出功能请求或错误报告。请注意,目前还不清楚数字解析是否是一个瓶颈(遗憾的是没有强大的分析器)。事实上,我预计瓶颈会存在于其他地方。

如果您想通过减少数字操作来提高质量,您可能需要编写一些低级驱动程序文件,将内容直接写入 PDF。PDF 中的一些操作实际上需要二进制数据,但它们需要映射整数而不是浮点数。我希望这种方法产生的质量与 pgfplots 产生的质量完全相同(如果不是,我希望有错误报告)。

我希望这些想法有助于改善对答案的搜索,并澄清您所想到的用例。

答案2

1 pgfplots 可以读取浮点数的二进制表示吗?

简而言之,不是。

我知道这个主题已经过时了,但对于像我这样对浮点格式有同样问题的人来说:pgfplots 现在可以很好地处理浮点数据(例如 csv 格式)。请参阅 pgfplots 手册第 21 页。

干杯

相关内容