Sort
對數據進行排序以繪製圓
在這裡,我有一個數據,我將使用 Gnuplot 繪製線條。使用程式碼
pl 'Sphere_ISOTEST_data.txt' w p
我得到下圖
但是,使用
pl 'Sphere_ISOTEST_data.txt' w l
我得到以下資訊:
任何人都可以建議如何對數據進行排序,以便我可以繪製
w l
並僅獲取圓的周長。
這可以通過將笛卡爾座標轉換為極座標並按角度排序來解決。
我們可以將角度計算為
atan2(y,x)
。我們可以通過應用Schwartzian 變換使用這個計算出的數字對原始數據進行排序,其中角度用作臨時排序鍵:
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