如何在 gnuplot 中使用带有 "with" 符号的动态变量名称?
How can I use dynamic variable names in gnuplot with "with" notation?
我想在带有 for 循环的 plot 命令中使用变量或数组,如下所示
style[1]= "lines lt 4 lw 2"
style[2] = "points lt 3 pt 5 ps 2"
....
title[1]= "first title"
title[2]= "second title "
...
或
style="'lines lt 4 lw 2' 'points lt 3 pt 5 ps 2'"
title="'first title' 'second title'"
绘图命令
plot for [i=1:1000] 'data.txt' u 1:2 title title[i] with style[i]
plot for [i=1:1000] 'data.txt' u 1:2 title word(title,i) with word(style,i)
我在 title 部分成功了,但在 with 部分失败了。我意识到问题是由引号引起的。
i=1
plot 'data.txt' u 1:2 title "first title" with "lines lt 4 lw 2"
当我使用数组和 word 属性时,由于引用错误而出现错误。我尝试了 sprintf 但仍然没有成功。
sprintf("with %s", style'.i.')
希望我能正确解释。知道我如何解决这个问题吗?或者我怎样才能删除引号。非常感谢。
如果您想要 select 的样式仅包含行 and/or 点,那么您可以通过定义相应的 linestyle
然后 select 来实现按编号。
set style line 1 lt 4 lw 2 pt 0 # lines only, no points
set style line 2 lt 3 lw 0.001 pt 5 ps 2 # points only, no lines
array Title[2] = ["style 1", "style 2"]
plot for [i=1:2] sin(x/i) with linespoints ls i title Title[i]
注意:将 lw 设置为 0 可能无法抑制线条,因为许多终端将其解释为“最细的可能线条”而不是“无线条”。所以我们将它设置为非常非常薄的东西,希望不会被看到。
如果您想要 select 的样式包含线条+点以外的其他内容,那么不,我不认为可以使用此技巧。
您可以尝试构建一个完整的绘图命令作为字符串,然后 eval
它:
max_i = 2
array title[max_i]
array style[max_i]
style[1]= "lines lt 4 lw 2"
style[2] = "points lt 3 pt 5 ps 2"
title[1]= "first title"
title[2]= "second title"
cmd="plot NaN notitle" # dummy for starting iteration
do for [i=1:max_i] {
# append the explicit plot command
cmd = sprintf("%s, sin(x*%d) title \"%s\" with %s", cmd, i, title[i], style[i])
}
print cmd # just for checking the final plot command
eval cmd # run plot command
1000 行可能会很慢(甚至根本无法运行)。但是无论如何,我会有点害怕在一个图表中有 1000 行和标题。
我想在带有 for 循环的 plot 命令中使用变量或数组,如下所示
style[1]= "lines lt 4 lw 2"
style[2] = "points lt 3 pt 5 ps 2"
....
title[1]= "first title"
title[2]= "second title "
...
或
style="'lines lt 4 lw 2' 'points lt 3 pt 5 ps 2'"
title="'first title' 'second title'"
绘图命令
plot for [i=1:1000] 'data.txt' u 1:2 title title[i] with style[i]
plot for [i=1:1000] 'data.txt' u 1:2 title word(title,i) with word(style,i)
我在 title 部分成功了,但在 with 部分失败了。我意识到问题是由引号引起的。
i=1
plot 'data.txt' u 1:2 title "first title" with "lines lt 4 lw 2"
当我使用数组和 word 属性时,由于引用错误而出现错误。我尝试了 sprintf 但仍然没有成功。
sprintf("with %s", style'.i.')
希望我能正确解释。知道我如何解决这个问题吗?或者我怎样才能删除引号。非常感谢。
如果您想要 select 的样式仅包含行 and/or 点,那么您可以通过定义相应的 linestyle
然后 select 来实现按编号。
set style line 1 lt 4 lw 2 pt 0 # lines only, no points
set style line 2 lt 3 lw 0.001 pt 5 ps 2 # points only, no lines
array Title[2] = ["style 1", "style 2"]
plot for [i=1:2] sin(x/i) with linespoints ls i title Title[i]
注意:将 lw 设置为 0 可能无法抑制线条,因为许多终端将其解释为“最细的可能线条”而不是“无线条”。所以我们将它设置为非常非常薄的东西,希望不会被看到。
如果您想要 select 的样式包含线条+点以外的其他内容,那么不,我不认为可以使用此技巧。
您可以尝试构建一个完整的绘图命令作为字符串,然后 eval
它:
max_i = 2
array title[max_i]
array style[max_i]
style[1]= "lines lt 4 lw 2"
style[2] = "points lt 3 pt 5 ps 2"
title[1]= "first title"
title[2]= "second title"
cmd="plot NaN notitle" # dummy for starting iteration
do for [i=1:max_i] {
# append the explicit plot command
cmd = sprintf("%s, sin(x*%d) title \"%s\" with %s", cmd, i, title[i], style[i])
}
print cmd # just for checking the final plot command
eval cmd # run plot command
1000 行可能会很慢(甚至根本无法运行)。但是无论如何,我会有点害怕在一个图表中有 1000 行和标题。