如何在gnuplot中创建三维相空间图?

时间:2013-07-27 00:12:44

标签: gnuplot

请参阅此文Enclosed, but not Encrypted

我有一些二进制数据。我想执行那篇文章中显示的gnuplots,但是使用我的数据。

  

对于三维相空间图,序列a,b,c,d,e,   f等可用作空间坐标(a-b,b-c,c-d),(b-c,c-d,   d-e),(c-d,d-e,e-f)等。创建的图中的图案显示出来   后续序列之间的重复关系。在这个阶段图中,   50,000个16位随机数将产生一个非结构化的云   点。

我想做同样的事情。我有一个二进制文件(大约10 MB),我想通过gnuplot运行它来创建漂亮的gnuplot图。

我在gnuplot中输入什么来实现这一目标?

在谷歌搜索“相空间图”和gnuplot并没有太多回报。我不知道是不是因为这篇文章是德语的翻译。我不认为我在堆栈交换站点找到了相关的答案。

1 个答案:

答案 0 :(得分:11)

要绘制3d相空间,请使用以下脚本,该脚本与gnuplot页面中的running average example类似:

reset
back4 = back3 = back2 = back1 = 0
shift(x) = (back4 = back3, back3 = back2, back2 = back1, back1 = x)
samples(x) = $0 < 3 ? NaN : x
set ticslevel 0
# the labels are only for orientation when checking the test data
set xlabel 'xlabel'
set ylabel 'ylabel'
splot 'randomdata.dat' using (shift($1), samples(back4-back3)):(samples(back3-back2)):(samples(back2-back1))

Gnuplot必须包​​含四个数据值,这些数据值存储在back1back4中。对于每个新值,存储的值都会移动shiftsamples注意不使用前三个值,但仅存储(NaN会创建无效的数据点)。

要测试它,请使用此文件randomdata.dat

21
15
10
6
3
1
0

这绘制了(6,5,4),(5,4,3),(4,3,2)和(3,2,1)处的四个数据点。

如果您有二进制数据文件,例如16位数字,使用

splot 'binaryfile' binary format="%ushort" using (shift($1), samples(back4-back3)):(samples(back3-back2)):(samples(back2-back1))

如果您需要更改数据大小,请调用gnuplot并输入show datafile binary datasizes以查看支持的格式。