贡献者: addis
MatPlot 是笔者写的一个轻量的 C++ 科学绘图函数库,可以在 Windows 系统下使用,尤其是 Visual Studio Code。其函数与 Matlab 中的画图函数相似,目前主要提供的函数有例如 figure(),close(),plot(),scatter(),clf(),axis() 等,暂时不支持 3D 画图。GitHub 页面点这里。
我们先介绍用法,安装说明见最后。
注意 MatPlot 的所有函数都具有 namespace MatPlot。MatPlotInit() 和 MatPlotClose() 分别是初始化和退出 MatPlot 的命令,在程序中分别只能使用一次。所有画图函数必须在调用 MatPlotInit() 之后调用 MatPlotClose() 之前使用。为了让程序不立即终止,可以用 Sleep() 函数暂停程序,输入的数字是暂停的毫秒数。
plot() 函数的完整格式为
plot(double *px, double *py, int N, char color = 'a');
其中 px 和 py 既可以是数组也可以是指针,N 是 px 和 py 的长度,color 是颜色,默认值 'a' 代表自动颜色,这种模式下每使用一次 plot()(或 scatter),颜色就会改变一次。color 可选
'r'(red),
'g'(green),
'b'(blue),
'y'(yellow),
'm'(magenta),
'c'(cyan),
'k'(black),
'w'(white)。
plot() 默认在 “当前画图框”(见下文)上绘制,如果没有画图框,则自动生成画图框 figure1。
scatter() 函数用于画散点图,使用格式与 plot() 完全相同。如果在例 1 中的 plot() 下面加上代码
scatter(x, y, N);
运行结果如下
注意散点的颜色变成了橙色。
figure() 函数用于生成新的画图框,其的格式为
figure(int FigNo = -1);
默认值 -1 的情况下 figure() 按照顺序给画图框编号。如果输入 FigNo,则生成编号为 FigNo 的画图框。figure() 函数的另一个功能是指定当前画图框(Current Figure)为 FigNo。plot(),scatter() 以及其他许多函数都是对当前画图框进行操作。
close() 函数用于关闭画图框,其格式为
close(int FigNo = -1);
默认值 -1 的情况下,close() 关闭当前画图框,指定 FigNo 时关闭指定的画图框。如果 close() 关闭的是当前画图框(无论指定 FigNo 与否),则当前画图框自动变为下一个编号更大的画图框,如果不存在,则自动变为下一个编号更小的画图框。另外,单击画图框右上角的 x 按钮与使用 close() 效果相同。
close_all() 函数用于关闭所有画图框。
clf() 函数(clean figure)用于清空当前画图框,并把坐标范围设为 0 到 1。
axis() 函数用于调整坐标范围,格式为
axis(double xmin, double xmax, double ymin, double ymax);
其中 xmin,xmax 分别为 x 轴的最小和最大值,ymin 和 ymax 分别为 y 轴的最小和最大值。
axis_auto() 用于设置坐标轴为自动调节(新生成的画图框默认为自动调节),如果 plot() 或者 scatter() 函数的数据点超出当前的坐标范围,坐标轴会自动调整以包含所有数据点。
axis_manual() 用于设置坐标范围固定不变。
xticks() 和 yticks() 函数用于设置 x 轴和 y 轴的坐标点,格式都为
xticks(double tickmin, double tickmax, int Nticks = 26, int txtstart = 0, int txtspace = 5, int Ndigits = 2);
其中 tickmin 是和 tickmax 分别是最小和最大坐标点的坐标,Nticks 是坐标点的个数,txtspace 是每几个坐标点下方显示坐标,txtstart 是从第几个坐标点开始显示坐标,Ndigits 是显示的小数位数(目前还不支持科学计数法)。
目前坐标点和坐标显示的规划功能并不像 Matlab 中的那么完善。先来看一段画正弦函数的代码
可以发现 x 轴的坐标点安排不合理。我们可以用 xticks() 函数重新设置。在 plot() 函数下方插入
xticks(0, 6.2, 32, 0, 5, 1);
即设置最小的坐标点为 0,最大的为 6.2,共有 32 个坐标点,从第一个开始,每隔五个打印一个坐标,并保留 1 位小数。运行结果变为
为提供更友好的用户界面,MatPlot 在初始化的时候生成并隐藏了控制面板,可以用于临时调用 MatPlot 的常用函数。用 show_control() 函数可以显示控制面板。用 hide_control() 可以将其再次隐藏。为了使用控制面板,可以在程序中用 Sleep() 函数。
控制面板中标有函数名的按钮用于调用对应的函数,按钮旁的文本框用于输入对应函数的参数。其中 plot(...) 和 scatter(...) 按钮分别绘制 DataNo*sin(x) 的函数图和散点图。选择或取消 autoaxis(...) 选项相当于调用 axis_auto() 和 axis_manual() 函数。CurrentFig 显示当前画图框的编号(注意 0 代表 figure1,1 代表 figure2)按 OK 或 Cancel 退出 MatPlot。
这里介绍如何在 Visual Studio 2017 中 “安装” MatPlot.
首先用 Desktop Wizard 新建一个控制台工程
在 Wizard 中取消预编译(Precompiled Header)选项,选择空项目(Empty Project)按确定生成控制台程序(Console Application)。
生成工程以后,我们把 MatPlot.h, MatPlot.lib 和 MatPlot.dll(注意这些文件有 32bit 和 64bit 两个版本)复制到工程文件夹(...\ MatPlotTest\ MatPlotTest)中。然后在菜单栏打开工程,属性
在属性对话框中的 Linker,Input,Additional Dependencies 的右边按下拉按钮
编辑,添加 MatPlot.lib; 确定。
在 Solution Explorer 中对 “头文件” 文件夹按右键添加已存在项目
选择刚才复制的 MatPlot.h 头文件。我们再在 “源文件” 文件夹中添加一个新项目,在弹出的对话框中选择 .cpp,输入文件名为 MatPlotTest.cpp
现在就可以在 cpp 文件中输入上文的例程代码并编译运行了。注意使用 MatPlot 的源文件中必须添加 Windows.h 和 MatPlot.h 头文件。
 
 
 
 
 
 
 
 
 
 
 
友情链接: 超理论坛 | ©小时科技 保留一切权利