Gnuplot 和 C - 绘图不同 symbols/colors

Gnuplot and C - plot different symbols/colors

我想用不同的颜色和符号绘制不同的点。这是我在“C”中的代码:

float x[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
float y[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};

FILE *gnuplot = popen("gnuplot", "w");

fprintf(gnuplot, "plot '-' pt 7 pointsize 2 lc \"blue\" notitle \n");

for (int i = 0; i < 6; ++i) {

    fprintf(gnuplot,"%f %f\n", x[i], y[i]);
}

fprintf(gnuplot, "plot '-' pt 5 pointsize 2 lc \"red\" notitle \n");

for (int i = 6; i < 12; ++i) {

    fprintf(gnuplot,"%f %f\n", x[i], y[i]);
}

fprintf(gnuplot, "e\n");
fflush(gnuplot);
getch();
fclose(gnuplot);

不幸的是,所有点的类型和颜色都相同。我的错误是什么?提前致谢!

编辑:

Result of the code

所有点都是蓝色的,点类型为 7,点大小为 2。更改样式的第二个命令行无效:

    fprintf(gnuplot, "plot '-' pt 5 pointsize 2 lc \"red\" notitle \n");

您的代码如下所示:

plot '-' pt 7 ps 2 lc "blue" notitle
0    0
1    1
2    2
3    3
4    4
5    5
plot '-' pt 6 ps 2 lc "red" notitle
6    6
7    7
8    8
9    9
10   10
11   11
e

对于内联数据,即特殊文件名 '-',数据以一行 e 结束。检查 help special-filenames.

因此,您的代码将:

  • 用蓝色圆圈绘制 0 到 5 之间的 x
  • plot '-' pt 6 ps 2 lc "red" notitle 将被解释为数据行,因为行内数据尚未被行 e 结束,因此,该行将被忽略,因为它不包含数值数据
  • 用蓝色圆圈绘制从 6 到 11 的 x

但您似乎想要以下内容:

代码:

plot '-' pt 7 ps 2 lc "blue" notitle, \
     '-' pt 6 ps 2 lc "red"  notitle
0    0
1    1
2    2
3    3
4    4
5    5
e
6    6
7    7
8    8
9    9
10   10
11   11
e

结果:

添加:(如评论中所述)

自 gnuplot 5.0 以来,您拥有将数据也包含在绘图代码中的数据块,请检查 help inline。 优点是,如果您想绘制多列图,则不必多次提供数据或将其拆分为连续的 2 列数据。 以下示例将产生相同的情节:

代码:

$Data1 <<EOD
0    0
1    1
2    2
3    3
4    4
5    5
EOD

$Data1 <<EOD
6    6
7    7
8    8
9    9
10   10
11   11
EOD

plot $Data1 u 1:2 w p pt 7, \
     $Data2 u 1:2 w p pt 5
$Data <<EOD
0    0    6    6
1    1    7    7
2    2    8    8
3    3    9    9
4    4    10   10
5    5    11   11
EOD

plot $Data u 1:2 w p pt 7, \
        '' u 3:4 w p pt 5
plot '-' u 1:2 w p pt 7, \
     '-' u 1:2 w p pt 5,
0    0
1    1
2    2
3    3
4    4
5    5
e
6    6
7    7
8    8
9    9
10   10
11   11
e
plot '-' u 1:2 w p pt 7, \
     '-' u 3:4 w p pt 5,
0    0    6    6
1    1    7    7
2    2    8    8
3    3    9    9
4    4    10   10
5    5    11   11
e
0    0    6    6
1    1    7    7
2    2    8    8
3    3    9    9
4    4    10   10
5    5    11   11
e