![对数据进行排序以绘制圆](https://linux22.com/image/190465/%E5%AF%B9%E6%95%B0%E6%8D%AE%E8%BF%9B%E8%A1%8C%E6%8E%92%E5%BA%8F%E4%BB%A5%E7%BB%98%E5%88%B6%E5%9C%86.png)
这里我有一个数据我将使用 Gnuplot 绘制线条。使用代码
pl 'Sphere_ISOTEST_data.txt' w p
我得到下图
但是,使用
pl 'Sphere_ISOTEST_data.txt' w l
我得到以下信息:
任何人都可以建议如何对数据进行排序,以便我可以绘制w l
并仅获取圆的周长。
答案1
这可以通过以下方式解决将笛卡尔坐标转换为极坐标并按角度排序。
我们可以将角度计算为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
该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