データをソートして円を描きます。

データをソートして円を描きます。

ここに一つあります。データGnuplotを使って線を描きます。コードの使用

pl 'Sphere_ISOTEST_data.txt' w p

私は次の絵を得る

これ

しかし

pl 'Sphere_ISOTEST_data.txt' w l

次のメッセージが表示されます。

ここに画像の説明を入力してください。

w l誰もが円の周囲だけをプロットして取得できるようにデータを並べ替える方法を提案できますか?

ベストアンサー1

この問題は次のように解決できます。デカルト座標を極座標に変換角度でソートされています。

角度は次のように計算できますatan2(y,x)

この計算された数値を使用して元のデータを並べ替えることができます。シュワルツ変換ここで、 angle は一時ソートキーとして使用されます。

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

プログラムawkatan2()ファイルの値に基づいて値を計算し、タブ文字を区切り文字として使用して、元の行の前の各行に値を追加します。その後、ユーティリティはsortデータをソートし、cut一時ソートキーを削除するために使用されます。

私はsort -g非標準を使用しています。このオプションは通常、Universal Numeric Orderingが有効な状態で実装されています。一部の値は非常に小さいため、科学的表記法で表示されるため-g使用する必要があります。また、数値を正しく読み取って並べ替えるには、POSIXロケール(" ")atan2()を使用する必要があります。明らかに、印刷時に値の出力形式を変更することでこの問題を解決できますが、これは少なくとも一般的なアイデアを示しています。Csortatan2()

結果はに記録されますsorted.txt

結果グラフ

GNUTERM=png gnuplot -e 'set size square; pl "sorted.txt" w l' >sorted.png

おすすめ記事