gnuplot에서 저는 5 개의 매개 변수가있는 함수를 플로팅하려고합니다. 그 값은 동일한 그래프에 8 번 외부 파일에 저장됩니다. 온도의 함수로 8 종의 증기압을 플로팅하고 싶습니다. 증기압은 5 가지 변수로 매개 변수화됩니다. do-for
루프를 사용해 보았지만 한 종만 표시됩니다. 8 개의 매개 변수 세트를 사용하여 동일한 플롯에 함수를 8 번 플롯하려면 어떻게해야합니까? 아래 코드는 이 답변을 기반으로 하며 주어진 답변이 8 개의 png를 인쇄한다는 점을 제외하고 작동하지만 1을 원하며 그렇게하려고 수정했습니다.
parameters.txt
A B C D E
33.634 -3647.9 -8.6428 -9.69E-11 1.19E-06
19.419 -5869.9 -0.4428 -1.26E-02 5.22E-06
-15.077 -4870.2 14.501 -3.16E-02 1.35E-05
76.1 -5030 -25.078 9.76E-03 -2.58E-13
2.1667 -2631.8 4.035 -1.18E-02 6.10E-06
39.917 -4132 -10.78 1.97E-10 2.04E-06
29.89 -3953.5 -7.2253 2.11E-11 8.96E-07
99.109 -7533.3 -32.251 1.05E-02 1.23E-12
vapor.plt
reset
datafile = "parameters.txt"
set terminal pngcairo
set xrange [273.15:493.15]
set logscale y
set output "vapor.png"
do for [step=1:8] {
# read parameters from file, where the first line is the header, thus the +1
a=system("awk '{ if (NR == " . step . "+1) printf \"%f\", $1}' " . datafile)
b=system("awk '{ if (NR == " . step . "+1) printf \"%f\", $2}' " . datafile)
c=system("awk '{ if (NR == " . step . "+1) printf \"%f\", $3}' " . datafile)
d=system("awk '{ if (NR == " . step . "+1) printf \"%f\", $4}' " . datafile)
e=system("awk '{ if (NR == " . step . "+1) printf \"%f\", $5}' " . datafile)
# convert parameters to numeric format
a=a+0.
b=b+0.
c=c+0.
d=d+0.
e=e+0.
plot 10**(a + b/x + c*log10(x) + d*x + e*x**2) title ''
}
set output
여러 함수를 하나의 그래프에 플로팅하려면 하나의 plot
명령 만 사용 하고 함수를 쉼표로 구분해야합니다.
plot f(x), g(x), h(x)
이것은 하나의 그래프에 세 가지 함수를 모두 표시합니다. 귀하의 경우를 들어 당신이 먼저 매개 변수를 추출해야합니다 a1
, a2
... a8
등 이것은 당신이 파라미터 세트에 대한 키 (전설)를 가질 수 있다는 장점이있다.
두 번째 옵션은 기존 스크립트에 더 적합합니다. 다음과 같이 plot
호출 해야 합니다 multiplot
.
reset
datafile = "parameters.txt"
set terminal pngcairo
set xrange [273.15:493.15]
set logscale y
set output "vapor.png"
set lmargin at screen 0.1
set rmargin at screen 0.9
set bmargin at screen 0.1
set tmargin at screen 0.9
set multiplot
do for [step=1:8] {
# read parameters from file, where the first line is the header, thus the +1
a=system("awk '{ if (NR == " . step . "+1) printf \"%f\", $1}' " . datafile)
b=system("awk '{ if (NR == " . step . "+1) printf \"%f\", $2}' " . datafile)
c=system("awk '{ if (NR == " . step . "+1) printf \"%f\", $3}' " . datafile)
d=system("awk '{ if (NR == " . step . "+1) printf \"%f\", $4}' " . datafile)
e=system("awk '{ if (NR == " . step . "+1) printf \"%f\", $5}' " . datafile)
# convert parameters to numeric format
a=a+0.
b=b+0.
c=c+0.
d=d+0.
e=e+0.
plot 10**(a + b/x + c*log10(x) + d*x + e*x**2) lt step title ''
if (step == 1) {
unset border
unset xtics
unset ytics
}
}
unset multiplot
set output
함께 multiplot
국경과 틱 추한 (대담)를 보이는 때마다, 다시 그려야 할 것이다. 이를 위해 첫 번째 플롯 후에 border, xtics 및 ytics를 설정 해제합니다. 그러나 모든 플롯에 대해 동일한 여백을 갖기 위해 처음에는 고정 된 절대 여백을 설정했습니다. 첫 번째 플롯으로 계산되는 자동 여백을 유지할 수 있지만 약간 길다 (문서의 'Gnuplot 정의 변수'항목 참조).
또한 모든 플롯에 다른 선 종류를 사용했습니다. 위의 스크립트는 출력을 제공합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다