同じグラフにいくつかの曲線をプロットする必要があります。これを行うには、必然的にforループを使用する必要があります。最初の2つの曲線を線でプロットし、他の曲線を点でプロットしたいと思います。すべての曲線を線で、またはすべての曲線を点でプロットすることはできますが、同じforループで変更することはできません。これが私のコードの関係する部分です:
set style line 1 lw 1 lc rgb "green"
set style line 2 lw 1 lc rgb "purple"
set style line 3 pt 1 ps 1.0 lc rgb "red"
set style line 4 pt 2 ps 1.0 lc rgb "red"
set style line 5 pt 3 ps 1.0 lc rgb "red"
plot for [i=1:words(FILES)] myDataFile(i) u (column(1)):((word(UTAUS_ch,i))) ls i title myTitle(i)
私は「序文たい私のls」「とWL 2つの最初のカーブのため」と「I lsの他人のために」。「lsi」を「if(i <2){wl ls i} else {ls i}」に置き換えてifステートメントを使おうとしましたが、Gnuplotはこの場所でifステートメントを見つけることを期待していません。
誰かが私を助けることができますか?ありがとう、マーティン
ここで述べたように、おそらくplot for
ループ内でプロットスタイルを切り替えることはできません。したがって、一方with points
と他方の2つの別々のループを実行するか、1with lines
つのループを実行してwith linespoints
、ポイントとラインに必要なすべてのパラメーターを関数として定義します(plotコマンドを読みやすくするため)。ここで述べたように、linewidth 0
はゼロではありませんが、通常は1ピクセルである可能な限り細い線です。行を完全に非表示にするには、を使用する必要がありますlinetype -2
。
コード:
### lines and points in the same plot for-loop
reset session
LINECOLORS = "red green blue magenta cyan"
LINEWIDTHS = '1.0 4.0 0.0 0.0 0.0'
POINTTYPES = '0 0 5 7 9'
POINTSIZES = '0 0 1.0 2.0 3.0'
TITLES = 'one two three four five'
myLinecolor(i) = word(LINECOLORS,i)
myLinewidth(i) = real(word(LINEWIDTHS,i))
myPointtype(i) = int(word(POINTTYPES,i))
myPointsize(i) = real(word(POINTSIZES,i))
myLinetype(i) = myLinewidth(i) == 0 ? -2 : 1
myTitle(i) = word(TITLES,i)
set samples 31
set key out
plot for [i=1:words(TITLES)] (sin(0.25*x-i)) w lp pt myPointtype(i) ps myPointsize(i) \
lt myLinetype(i) lw myLinewidth(i) lc rgb myLinecolor(i) title myTitle(i)
### end of code
結果:
添加:
プロットコマンドをできるだけ短く明確に保つために、線のスタイルを定義しplot for
てls i
、を介してコマンドで使用することもできます。その結果、上記と同じになります。
...
do for [i=1:words(TITLES)] {
set style line i pt myPointtype(i) ps myPointsize(i) \
lt myLinetype(i) lw myLinewidth(i) lc rgb myLinecolor(i)
}
plot for [i=1:words(TITLES)] (sin(0.25*x-i)) w lp ls i title myTitle(i)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加