gnuplot:在 for 循环中设置线条样式
gnuplot : setting line style in a for loop
我必须在同一张图上绘制多条曲线。我 necessarly 需要使用 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 i”前加上“w l”作为第 2 条曲线和“” ls i" 对于其他人。我尝试通过将“ls i”替换为“if (i < 2) {w l ls i} else {ls i}[=33=”来使用 if 语句]" 但 Gnuplot 不希望在此位置找到 if 语句。
有人可以帮助我吗?
谢谢,
马丁
如前所述 here 您可能无法在 plot for
循环中切换绘图样式。
因此,要么你做两个单独的循环,一个 with points
另一个 with 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 命令尽可能简短明了,您还可以定义线型并通过 ls i
在 plot for
命令中使用它,结果与上述相同。
...
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)
这里有一个使用宏的方法:
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"
set samp 100
set macro
cmd = ''
do for [i=1:10] {s = i<3? 'w l' : 'ls '.i;
cmd = cmd . '"+" us 1:(sin(x-'.i.'/10.)) '.s.' title "key '.i.'",'}
plot [0:2*pi] @cmd
我必须在同一张图上绘制多条曲线。我 necessarly 需要使用 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 i”前加上“w l”作为第 2 条曲线和“” ls i" 对于其他人。我尝试通过将“ls i”替换为“if (i < 2) {w l ls i} else {ls i}[=33=”来使用 if 语句]" 但 Gnuplot 不希望在此位置找到 if 语句。
有人可以帮助我吗? 谢谢, 马丁
如前所述 here 您可能无法在 plot for
循环中切换绘图样式。
因此,要么你做两个单独的循环,一个 with points
另一个 with 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 命令尽可能简短明了,您还可以定义线型并通过 ls i
在 plot for
命令中使用它,结果与上述相同。
...
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)
这里有一个使用宏的方法:
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"
set samp 100
set macro
cmd = ''
do for [i=1:10] {s = i<3? 'w l' : 'ls '.i;
cmd = cmd . '"+" us 1:(sin(x-'.i.'/10.)) '.s.' title "key '.i.'",'}
plot [0:2*pi] @cmd