看看这个网页 -封闭但未加密
对于三维相空间图,序列 a、b、c、d、e、f 等可用作空间坐标 (ab、bc、cd)、(bc、cd、de)、(cd、de、ef) 等。创建的图中的模式揭示了后续序列之间的重复关系。在此相图中,50,000 个 16 位随机数将产生非结构化的点云。
我想要做同样的事情。我有一个二进制文件(大约 10 MB),我想创建一些漂亮的 gnuplot 样式图表,就像他们在那个网页上所做的那样。
我该在 gnuplot 中输入什么来实现这一点?
答案1
以适合 gnuplot 的格式创建二进制文件的转储。为方便起见,我使用了
hexdump
自定义输出格式,我们需要将其存储在文件中,例如gnuplot.hdp
(原则上格式字符串可以通过命令行选项传递,但这样我们会在 gnuplot 脚本中遇到太多嵌套引号):$ cat gnuplot.hdp 3/1 "%03d " "\n" $ hexdump -f gnuplot.hdp random.data | head -n 4 236 027 076 070 243 055 047 115 211 184 206 073
使用 gnuplot 绘制数据。在最简单的情况下,我们将字节等绘制
1, 2, 3
为4, 5, 6
坐标x, y, z
:set parametric unset border unset xtics unset ytics unset ztics splot "< hexdump -f gnuplot.hdp random.data" using ($1):($2):($3) notitle
一个包含随机数的文件显示出——这并不奇怪——一个相当随机的散点图:
但是如果我们使用例如压缩严重的文件(例如简单的位图),我们会看到一个结构(这里是一行):
如果我们想更好地模仿所引用文章中的图,我们需要
6/1 "%03d " "\n"
ashexdump
格式,这样每行就有六个字节。我们必须splot
在 gnuplot 中扩展命令:splot "< hexdump -f gnuplot.hdp random.data" u ($1-$2):($2-$3):($3-$4) ls 1 not, '' u ($2-$3):($3-$4):($4-$5) ls 1 not, '' u ($3-$4):($4-$5):($5-$6) ls 1 not
gnuplot
将其视为和的u
缩写,以保持简短。using
not
notitle
对于位图我们现在得到一个好看的对象;
随机数据如下:
请注意,我们以 6 个字节的块来分析数据,即,如果只有第 6 个和第 7 个字节(或这些字节的倍数)相关,则图表不会显示这一点。
gnuplot
应该可以轻松处理 10MB 的输入文件,但旋转可能会变得很慢——这取决于您的计算能力。