데이터를 정렬하여 원을 그립니다.

데이터를 정렬하여 원을 그립니다.

여기 하나 있어요데이터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

관련 정보