여기 하나 있어요데이터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
프로그램 awk
은 atan2()
파일의 값을 기반으로 값을 계산하고 탭 문자를 구분 기호로 사용하여 원래 줄 앞의 각 줄에 값을 추가합니다. 그런 다음 유틸리티는 sort
데이터를 정렬하고 cut
임시 정렬 키를 제거하는 데 사용됩니다.
저는 sort -g
비표준을 사용하고 있습니다. 이 옵션은 일반적으로 Universal Numeric Ordering이 활성화된 상태로 구현되는데, 일부 값은 매우 작기 때문에 과학적 표기법으로 표시되므로 -g
사용해야 합니다 . 또한 숫자를 올바르게 읽고 정렬 하려면 POSIX 로케일(" ") atan2()
을 사용해야 합니다 . 분명히 인쇄할 때 값의 출력 형식을 수정하여 이 문제를 해결할 수 있지만 이는 적어도 일반적인 아이디어를 보여줍니다.C
sort
atan2()
결과는 에 기록됩니다 sorted.txt
.
GNUTERM=png gnuplot -e 'set size square; pl "sorted.txt" w l' >sorted.png