Gnuplot 5.2版支持数组。根据{{3}}的定义,您可以声明一维数组并将其绘制
array A[100]
do for [i=1:100] { A[i] = sin(2*pi*i/100.) + 0.1*rand(0) }
plot A
这将绘制索引为A
的矩阵i
。
有没有办法拥有两个一维数组(例如:x
和y
)并绘制它们y vs x
。
OR
声明2D数组A
并相对于A
的第一列绘制A
的第二列?
答案 0 :(得分:1)
诀窍是让gnuplot生成一组要绘制的样本。除了提供文件名,您还可以提供字符串“ +”以沿一个维度生成一组样本,或者提供“ ++”以沿两个维度生成一组样本。 Gnuplot称这些为“特殊文件名”。对于您的情况,您想生成100个样本(整数从1到100),并将每个样本用作数组的索引。
array A[100]
array B[100]
do for [i=1:100] {
A[i] = something
B[i] = something else
}
plot sample [i=1:100] '+' using (A[i]):(B[i]) with linespoints
关键字“样本”保证了方括号中的术语不会被误解为设置绘图的水平范围(“ set xrange”)。
文档条目
答案 1 :(得分:1)
答案2 如果保证两个数组A和B具有相同的大小,则可以使用更简单的plot命令。首先,请注意以下所有plot命令都是等效的。
plot A
plot A using 1:2
plot A using (column(1)):(column(2))
plot A using ($1):($2)
plot A using ($1):(A[$1])
这是因为出于绘制数组A的目的,它被视为提供两列信息,即索引i(列1)和值A [i](列2)。按照标准的gnuplot语法,plot命令的“使用”说明符中的每个字段都可以包含裸列编号或括号中的表达式。在表达式内部,可以通过在$前面加上$符号或使用函数column(i)来引用列的值。
请牢记,下面的命令将相对于数组A的值绘制数组B的值。
plot A using (A[$1]):(B[$1])
答案 2 :(得分:1)
答案3 您问是否存在使A成为二维数组的替代方法。不完全是,但是请记住,在gnuplot中,浮点数实际上是复数值。因此,您可以使用每个A [i]的实部和虚部将其放置在x / y平面中:
array A[36]
set angle degree
i = {0,1} # i = sqrt(-1) as a complex value
do for [n=1:36] {
A[n] = cos(real(10.*n)) + i * sin(real(10.*n))
}
plot A using (real(A[$1])):(imag(A[$1])) with lp
答案 3 :(得分:1)
您是否有任何特殊原因想要首先在数组中包含数据?
在用函数值填充数组时,也可以直接将两个函数(或者说2D数组的两列)直接相对绘制,而不必先在do for
循环中定义数组。
只需定义一些功能并将它们相互绘制即可。
使用set samples
定义点数,并使用plot sample []
设置范围。我想这比设置数组大小,执行循环并使用索引i
和范围和/或偏移量“混乱”要容易得多。
### plot one function vs. another function
reset session
f(x) = sin(x) + 0.1*rand(0)
g(x) = cos(x) + 0.1*rand(0)
set samples 100
plot sample [0:2*pi] '+' u (f($1)):(g($1)) w lp pt 7 lc rgb "red"
### end of code