在GNU plot中如何将.dat文件和.csv文件的数据绘制在同一张图上

3

我有两种格式的数据文件,一种是 .csv,另一种是 .dat。是否可以在同一张图表上绘制这两个文件的数据?

我使用以下命令来绘制 .dat 文件中的数据:

plot "test.dat" using 1:2 with lines

我打算使用连续线来绘制.dat文件中的数据。这一点我已经实现了。

对于从.csv文件中绘制数据,我使用了以下命令:

set datafile separator ','
plot "test1.csv" using 1:2

我想使用虚线绘制来自 .csv 文件的数据。例如,类似于这样“- - - - - -”

.dat 文件中的数据行为

-8.14257e-01 2.04276e+00 0.00000e+00

而来自 .csv 文件的数据为

3.12487-03,1.58743-03


我认为你需要提供更多关于这些文件的信息。你是否已经能够使用gnuplot绘制它们中的任何一个的数据? - matt
我对GNU绘图不熟悉。是的,我可以分别从.csv和.dat中绘制数据。但我不知道如何在同一张图上绘制它们。 - Aim
也许您可以在问题中添加绘制命令,以便将它们分别绘制出来。然后还要包括一个描述,当它们一起绘制时,您想让绘图看起来像什么样子。 - matt
你尝试过使用 plot "test1.csv" using 1:2, "test.dat" using 1:2 w lines 吗? - matt
是的。但是来自“test1.csv”的数据没有绘制,因为这需要 set datafile separator ','。而如果我使用 set datafile separator ',',则无法绘制来自“test.dat”的数据。 - Aim
显示剩余2条评论
2个回答

2

你可以做的一件事是重新绘图。

plot "test.dat" u 1:2 w lines
set datafile separator ','
replot "test.csv" u 1:2

那样会在您的图中添加第二行。另一件事是指定输入格式。
set datafile separator ','
plot "test.dat" u 1:2 "%lf %lf %lf", "test.csv"

注意:在Gnuplot 5.2中,我可以绘制两个文件而无需指定任何内容。
plot "test.dat", "test.csv"

他们两个都显示出来了。

格式说明文档(帮助使用第98页):

语法:plot '文件' using <entry> {:<entry> {:<entry> ...}} {'format'}

如果指定了格式,则使用 C 库中的 `scanf` 函数读取每个数据文件记录。否则,将记录解释为由空格(空格和/或制表符)分隔的列(字段)数据。但请参见数据文件分隔符。


“plot "test.dat", "test.csv"” 正在绘制某些东西,但不正确(gnuplot 5.2)。 - Friedrich -- Слава Україні
1
谢谢。由于我很少使用csv文件,所以我会反过来:plot "test.dat", "test.csv" u 1:2 "%lf,%lf,%lf"。因此,真的没有必要使用set datafile separator!这应该是第一个答案。 - Friedrich -- Слава Україні

1
您可以使用 set datafile separator 指定多个字符作为分隔符。如果列是由空格或逗号分隔的,请使用。
set datafile separator " ,"
plot "test.dat", "test1.csv"

请注意,这仅适用于列之间只有一个空格分隔的情况。但是,拥有一个简单的变体可能会很有用。

1
但是,如果逗号分隔文件中的字段内部包含空格,则无法正常工作。 - Ethan
...并且它只在test.dat文件中有一个空格作为列分隔符时才有效。多个空格将无法正常工作。 - theozh
@theozh,确实,我不知道那个。 - Christoph

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接