Arrays 在gnuplot中声明两个数组,并绘制它们之间的关系
Gnuplot版本5.2支持阵列。如前所述,可以声明1D数组并绘制它们Arrays 在gnuplot中声明两个数组,并绘制它们之间的关系,arrays,plot,gnuplot,Arrays,Plot,Gnuplot,Gnuplot版本5.2支持阵列。如前所述,可以声明1D数组并绘制它们 array A[100] do for [i=1:100] { A[i] = sin(2*pi*i/100.) + 0.1*rand(0) } plot A 这将使用索引i绘制矩阵A 是否有一种方法可以拥有两个1D数组(例如:x和y),并将它们绘制成y与x 或 声明一个2D数组a并绘制a的第二列,与a的第一列相对应。诀窍是让gnuplot生成一组要绘制的样本。您可以提供字符串“+”以沿一维生成一组样本,或“++”以沿二维生
array A[100]
do for [i=1:100] { A[i] = sin(2*pi*i/100.) + 0.1*rand(0) }
plot A
这将使用索引i
绘制矩阵A
是否有一种方法可以拥有两个1D数组(例如:x
和y
),并将它们绘制成y与x
或
声明一个2D数组
a
并绘制a
的第二列,与a
的第一列相对应。诀窍是让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
关键字“sample”保证方括号中的术语不会被错误解释为设置绘图的水平范围(“set xrange”)
文件条目
- 帮助+
- 帮助特殊文件名
- 帮助取样 回答#2 如果保证两个阵列A和B具有相同的大小,则可以使用更简单的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命令的“using”说明符中的每个字段都可以包含裸列编号或括号中的表达式。在表达式中,可以通过在$sign前面加前缀或使用函数column(i)来引用列的值
考虑到这一点,下面的命令将根据数组A的值绘制数组B的值
plot A using (A[$1]):(B[$1])
回答#3
您询问是否有其他方法来制作二维数组。不完全是这样,但请记住,在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
是否有任何特殊原因使您希望首先将数据放入数组 当您用函数值填充数组时,您还可以将两个函数(或者如您所说的二维数组的两列)直接相对地绘制,而无需首先在
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
虽然您的代码可能作为答案正确,但详细说明代码的作用,它可以提高答案的质量。签出文章:@Ethan:有没有办法不使用
+
符号而只画线。我甚至试过其他符号,比如*
,-
和x
。没有一个奏效。似乎只有+
符号有效。@Asarkar,上面的'+'
与绘图中使用的符号无关。将用于行
而不是用于行点
。查看有关如何更改线条、点、颜色、线宽、点大小等的帮助。@theozh,谢谢。但是+
符号做什么呢?在gnuplot中,我还尝试使用帮助绘制样本。很抱歉,“绘图样本”没有帮助。
。因此,对示例
关键字和+
符号稍作解释会有所帮助。感谢您的回答。我想我更喜欢答案1,因为它简单。目前我正在编写一个fortran模块来调用gnuplot进行实时绘图。我最初认为传递x和y数组会有所帮助。但是,当replot命令用于新的输入数据时,这会产生问题。因此,我必须将数据保存到文件并绘制它们。