Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran gnuplot绘图的数据格式_Fortran_Gnuplot - Fatal编程技术网

Fortran gnuplot绘图的数据格式

Fortran gnuplot绘图的数据格式,fortran,gnuplot,Fortran,Gnuplot,我有来自fortran代码的数据文件。数据是大小为500的两个数组v和np以及标量时间。 每次我将新的时间值和文件的两行中的两个向量以以下格式附加到文件: time, v(1), v(2), v(3), ..., v(499), v(500) time, np(1), np(2), np(3), ..., np(499), np(500) 例如: 0.0, 1.0, 2.0, 3.0, ..., 499.0, 500.0 0.0, 0.1, 0.2, 0.3, ..., 0.499

我有来自fortran代码的数据文件。数据是大小为500的两个数组v和np以及标量时间。 每次我将新的时间值和文件的两行中的两个向量以以下格式附加到文件:

time,  v(1),  v(2),  v(3), ...,  v(499),  v(500)
time, np(1), np(2), np(3), ..., np(499), np(500) 
例如:

0.0, 1.0, 2.0, 3.0, ..., 499.0, 500.0
0.0, 0.1, 0.2, 0.3, ..., 0.499, 0.500
1.0, 1.0, 2.0, 3.0, ..., 499.0, 500.0
1.0, 0.1, 0.2, 0.3, ..., 0.499, 0.500
2.0, 1.0, 2.0, 3.0, ..., 499.0, 500.0
2.0, 0.1, 0.2, 0.3, ..., 0.499, 0.500
我想要的是在特定时间绘制
np
,作为
v
的函数(因此,在这种情况下,如果我想要
time=2
,我将绘制第5行和第6行,忽略第一行)。然而,gnuplot不喜欢这种格式。我使用python实现了它,但是我必须使用gnuplot

我在网上搜索,发现我可以用另一种格式输出数据,但这也不能正常工作。此格式如下所示:

0.0   0.0
1.0   0.1
2.0   0.2
3.0   0.3
4.0   0.4
...   ...
499.0 0.499
500.0 0.500


1.0   1.0
1.0   0.1
2.0   0.2
3.0   0.3
4.0   0.4
...   ...
499.0 0.499
500.0 0.500


2.0   2.0
1.0   0.1
2.0   0.2
3.0   0.3
4.0   0.4
...   ...
499.0 0.499
500.0 0.500
此格式绘制所有内容,包括时间,甚至使用
进行
循环和
每个不起作用的
函数

我还搜索了我是否可以用fortran格式化列中的数据,但是我找不到任何解决方案。我遇到的问题是,每次都会从内存中删除数组
v
np
。由于无法解释的原因,我无法将
v
np
保存在矩阵中,并保存它们以备将来使用

有没有一种方法可以在fortran上格式化数据,以便在gnuplot上读取数据,并且只能绘制一次


或者有没有一种方法可以只使用gnuplot读取这种格式?

gnuplot不喜欢行中的数据。 您可以使用外部工具转换数据,并简单地使用gnuplot将其绘制为列。不幸的是,gnuplot本身没有转置函数,尽管原则上您也可以使用gnuplot()进行转置,但对于大型数据集来说,它可能效率很低

实际上,这里有一个笨拙的gnuplot解决方案,用于从两行绘制数据。 感兴趣行的值使用虚拟表存储在数组中(因此需要gnuplot>=5.2.0)。选项
every::SkipCols
跳过第一列
SkipCols
。在本例中,跳过时间值的
SkipCols=1
。 也许有人可以进一步简化这种方法

代码:

### plotting a row versus another row (requires gnuplot >=5.2.0)
reset session

$Data <<EOD
0.0   0.1  0.2  0.3  0.4  0.5  0.6  0.7
0.0   1.1  1.2  1.3  1.4  1.5  1.6  1.7
1.0   2.1  2.2  2.3  2.4  2.5  2.6  2.7
1.0   3.1  3.2  3.3  3.4  3.5  3.6  3.7
2.0   4.1  4.2  4.3  4.4  4.5  4.6  4.7
2.0   5.1  5.2  5.3  5.4  5.5  5.6  5.7
EOD

myXrow = 2      # counting starts from 0
myYrow = 3      #
SkipCols = 1    # skip number of columns from the beginning

stats $Data u 0 nooutput            # get the number of columns
array X[STATS_columns-SkipCols]     # define array size
array Y[STATS_columns-SkipCols]     #
myX(row) = ($2==row ? X[$1-SkipCols+1]=$3 : NaN)
myY(row) = ($2==row ? Y[$1-SkipCols+1]=$3 : NaN)

# put the x,y rows into arrays
set table $Dummy
    plot $Data matrix u (myX(myXrow),myY(myYrow)) every :myYrow-myXrow:SkipCols:myXrow::myXrow+myYrow w table
unset table
undef $Dummy

set key noautotitle
plot X u 2:(Y[$1]) w lp pt 7
### end of code

gnuplot不喜欢行中的数据。 您可以使用外部工具转换数据,并简单地使用gnuplot将其绘制为列。不幸的是,gnuplot本身没有转置函数,尽管原则上您也可以使用gnuplot()进行转置,但对于大型数据集来说,它可能效率很低

实际上,这里有一个笨拙的gnuplot解决方案,用于从两行绘制数据。 感兴趣行的值使用虚拟表存储在数组中(因此需要gnuplot>=5.2.0)。选项
every::SkipCols
跳过第一列
SkipCols
。在本例中,跳过时间值的
SkipCols=1
。 也许有人可以进一步简化这种方法

代码:

### plotting a row versus another row (requires gnuplot >=5.2.0)
reset session

$Data <<EOD
0.0   0.1  0.2  0.3  0.4  0.5  0.6  0.7
0.0   1.1  1.2  1.3  1.4  1.5  1.6  1.7
1.0   2.1  2.2  2.3  2.4  2.5  2.6  2.7
1.0   3.1  3.2  3.3  3.4  3.5  3.6  3.7
2.0   4.1  4.2  4.3  4.4  4.5  4.6  4.7
2.0   5.1  5.2  5.3  5.4  5.5  5.6  5.7
EOD

myXrow = 2      # counting starts from 0
myYrow = 3      #
SkipCols = 1    # skip number of columns from the beginning

stats $Data u 0 nooutput            # get the number of columns
array X[STATS_columns-SkipCols]     # define array size
array Y[STATS_columns-SkipCols]     #
myX(row) = ($2==row ? X[$1-SkipCols+1]=$3 : NaN)
myY(row) = ($2==row ? Y[$1-SkipCols+1]=$3 : NaN)

# put the x,y rows into arrays
set table $Dummy
    plot $Data matrix u (myX(myXrow),myY(myYrow)) every :myYrow-myXrow:SkipCols:myXrow::myXrow+myYrow w table
unset table
undef $Dummy

set key noautotitle
plot X u 2:(Y[$1]) w lp pt 7
### end of code

据我所知,这可能归结为如何用gnuplot绘制某一行,对吗?也许这有帮助:哦,谢谢。我以前从未见过那篇文章。它可能适用于第一种输出格式。我现在必须看看如何忽略第一个值。据我所知,这可能归结为如何用gnuplot绘制某一行,对吗?也许这有帮助:哦,谢谢。我以前从未见过那篇文章。它可能适用于第一种输出格式。我现在必须看看如何忽略第一个值。这在我的本地计算机上有效,因为我有gnuplot 5.4。然而,我使用了一个集群,他们有gnuplot 5.0,所以它不起作用,这太令人伤心了。谢谢你的回答。我想我会放弃使用gnuplot,在python上做一些事情。一旦我找到了我喜欢的东西,我会将它们保存为gnuplot喜欢的格式并绘制出来。@Gundro嘿,等等。。。使用gnuplot通常您总能找到一个解决方法(有时相当麻烦)。我会考虑5.0版本。为什么他们不能更新到gnuplot 5.2或5.4?gnuplot 5.0是4-6岁。是的,gnuplot想成为一个绘图工具而不是数据分析工具。然而,在我看来,基本的操作,如转置数据不会有什么坏处。如果您安装了Python,您可以编写一个Python过程,并对预处理的数据再次使用gnuplot。我不知道他们为什么不想更新gnuplot或该特定集群中的其他工具。它有很多问题,但我无法更改它或使用其他群集。我试着用gnuplot只使用一个软件来做任何事情,因为我希望我的数字是gnuplot漂亮的。然而,我今天决定改用python,至少是为了操作和测试图形和数据。然后,一旦我高兴了,我将保存所需的数据,并用gnuplot绘制它,但在最后。如果我需要做一些奇怪的数据操作,我想这对我来说会更快。如果我找到一种方法,我会回来写在这里。谢谢你也许你的绘图脚本的第一行可以
ssh
到一台更先进的机器上?或者启动一个Docker映像?这在我的本地计算机中有效,因为我有gnuplot 5.4。然而,我使用了一个集群,他们有gnuplot 5.0,所以它不起作用,这太令人伤心了。谢谢你的回答。我想我会放弃使用gnuplot,在python上做一些事情。一旦我找到了我喜欢的东西,我会将它们保存为gnuplot喜欢的格式并绘制出来。@Gundro嘿,等等。。。使用gnuplot通常您总能找到一个解决方法(有时相当麻烦)。我会考虑5.0版本。为什么他们不能更新到gnuplot 5.2或5.4?gnuplot 5.0是4-6岁。是的,gnuplot想成为一个绘图工具而不是数据分析工具。然而,在我看来,基本的操作,如转置数据不会有什么坏处。如果您安装了Python,您可以编写一个Python过程,并对预处理的数据再次使用gnuplot。我不知道他们为什么不想更新gnuplot或该特定集群中的其他工具。它有很多问题,但我无法更改它或使用其他群集。我试着用gnuplot只使用一个软件来做任何事情,因为我希望我的数字是gnuplot漂亮的。但是我今天决定