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
我想用不同的颜色和符号绘制不同的点。这是我在“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