对数据进行排序以绘制圆

new*_*ent 1 sort plotting gnuplot numeric-data

在这里,我有一个数据,我将使用 Gnuplot 用线条绘制该数据。使用代码

pl 'Sphere_ISOTEST_data.txt' w p
Run Code Online (Sandbox Code Playgroud)

我得到下图

这个

但是,使用

pl 'Sphere_ISOTEST_data.txt' w l
Run Code Online (Sandbox Code Playgroud)

我得到以下信息:

在此处输入图片说明

任何人都可以建议如何对数据进行排序,以便我可以绘制w l并仅获得圆的周长。

Kus*_*nda 5

这可以通过将笛卡尔坐标转换为极坐标并按角度排序来解决。

我们可以计算角度为atan2(y,x)

我们可以通过应用施瓦兹变换使用这个计算出的数字对原始数据进行排序,其中角度用作临时排序键:

awk -v OFS='\t' '{ print atan2($2,$1), $0 }' Sphere_ISOTEST_data.txt |
LC_ALL=C sort -g | cut -f 2-  >sorted.txt
Run Code Online (Sandbox Code Playgroud)

awk程序计算atan2()从该文件中的值值和每行该值预先将原始线,采用作为定界符制表符。该sort实用程序然后对数据进行排序并cut用于删除临时排序键。

请注意,我正在使用sort -g,这是非标准的。该-g选项在实现时通常会启用“通用数字排序”,我们将需要使用它,因为某些atan2()值由于非常小而将采用科学计数法。我们还需要使用 POSIX 语言环境 (" C")sort来正确读取和排序数字。我们显然可以通过在atan2()打印时修改值的输出格式来解决这个问题,但这至少显示了总体思路。

结果写入sorted.txt.

结果图

GNUTERM=png gnuplot -e 'set size square; pl "sorted.txt" w l' >sorted.png
Run Code Online (Sandbox Code Playgroud)