cchart波形图表在aardio中的简单调用示例
首先介绍下这个图表:
CChart可以绘制多种二维、三维曲线,包括折线图、等高线图、云图、饼图、柱图、散点图、面积图、直方图、极线图、甘特图、雷达图、瀑布图、K线图,频谱图等,功能非常全面。 而且,CChart内部选项极为丰富,无论是曲线本身,还是标题、坐标轴、图例、背景、图像注释等部分,都有大量的选项可供设置,甚至消息响应、右键菜单等元素,都提供了自定义的方法。
CChart最大的优势,还是在于其对用户的友好性。在追求功能的同时,CChart在简化调用方面,做到了极致,一般只用几句代码就可以画出精致的图像。这一点可以说不仅胜过绝大部分非商业的图表软件,甚至不输于大部分商业图表软件。
CChart 开源免费, 支持MIT开源协议
CChart官方: http://www.cchart.net/
aardio调用cchart示例的github地址:
https://github.com/popde/aardio-cchart
/////////本地下载地址 ↓↓↓↓↓↓/////////////////////////////////////////////////
2021/10/12 最新版Cchart_x86.dll
更新: 添加了函数ChooseCurChart,参数可以是序号,也可以是hwnd句柄,主要用于同一个界面包含多个波形图的情况, 用来进行内存隔离.
//////////////////////////////////////////////////////////////////////////////
cchart 第一个示例:
import win.ui; /*DSG{{*/ var winform = win.form(text="aardio form";right=759;bottom=469) winform.add( static={cls="static";left=0;top=0;right=760;bottom=462;db=1;dl=1;dr=1;dt=1;notify=1;transparent=1;z=1} ) /*}}*/ //调用CChart波形图动态库函数 import cchart; cchart.CreateChart(); cchart.Attach1(winform.static.hwnd,0); cchart.ChooseCurChart1(winform.static.hwnd); cchart.AddPoint2D(-3.0, 9.0 ,0,0); cchart.AddPoint2D(-2.0, 4.0 ,0,0); cchart.AddPoint2D(-1.0, 1.0 ,0,0); cchart.AddPoint2D(0.0, 0.0 ,0,0); cchart.AddPoint2D(1.0, 1.0 ,0,0); cchart.AddPoint2D(2.0, 4.0 ,0,0); cchart.AddPoint2D(3.0, 9.0 ,0,0); cchart.SetTitle("Hello World,我的第一个CChart程序!"); cchart.ReDraw2(); winform.onClose = function(hwnd,message,wParam,lParam){ cchart.Detach(winform.static.hwnd); cchart.DestroyChart(); } winform.show(); win.loopMessage(); return winform;
第三例: 等高线
import win.ui; /*DSG{{*/ var winform = win.form(text="aardio form";right=759;bottom=469) winform.add( static={cls="static";left=0;top=0;right=760;bottom=457;db=1;dl=1;dr=1;dt=1;notify=1;transparent=1;z=1} ) /*}}*/ //调用CChart波形图动态库函数 import cchart; cchart.CreateChart(); cchart.Attach1(winform.static.hwnd,4);//kTypeContourLine=4 等高线图 cchart.ChooseCurChart1(winform.static.hwnd); //定义静态回调函数 func = function(x,y){ var ret = 1.0/((x-1.0)*(x-1.0)+y*y+1.0); return ret; } //dll中在别的线程中调用,所以这里用thread func_c = thread.tocdecl(func,"double(double,double)"); //cchart.SetType(6); cchart.SetFieldFcn(func_c); cchart.SetPlotRange(-2.0, 2.0, -2.0, 2.0); cchart.SetTitle("Cchart等高线"); //设置等高线的精度,一般设置为5或者6就可以了。设置得越高,第一次绘制的时候延迟就越长 cchart.SetContourPrecision(5); //设置等高线高度的个数 cchart.SetContourLineNum(50); cchart.ReDraw2(); winform.onClose = function(hwnd,message,wParam,lParam){ cchart.Detach(winform.static.hwnd); cchart.DestroyChart(); } winform.show(); win.loopMessage(); return winform;
第四例: 折线图 的一些操作
import win.ui; /*DSG{{*/ var winform = win.form(text="aardio form";right=759;bottom=469) winform.add( static={cls="static";left=0;top=0;right=760;bottom=428;db=1;dl=1;dr=1;dt=1;notify=1;transparent=1;z=1} ) /*}}*/ import cchart; cchart.CreateChart(); cchart.Attach1(winform.static.hwnd,0);//kTypeXY=0 折线图 cchart.ChooseCurChart1(winform.static.hwnd); var x = { double arr[200] = {0} }; var y = { double arr[200] = {0} }; for(i=1;200;1){ x.arr[i] = i ; y.arr[i] = 5.0*math.sin(i*2.0*3.14/360.0*3.0) ; } cchart.AddCurve1(x,y,200,0); //显示图例 cchart.SetLegendShow(true,0) //设置图例名称 cchart.SetDataTitle("aardio王菲",0,0) //设置轴名,左坐标轴为0,下坐标轴为1,右坐标轴为2,上坐标轴为3 cchart.SetAxisTitle1("左边轴名",0,0); cchart.SetAxisTitle1("下边轴名",1,0); //设置显示网格 cchart.SetGridLine(true,true,true,true,0); //设置背景色 cchart.SetBkgndColor(0xFFE6C2,0); cchart.ReDraw2(); winform.onClose = function(hwnd,message,wParam,lParam){ cchart.Detach(winform.static.hwnd); cchart.DestroyChart(); } winform.show(); win.loopMessage(); return winform;
第五例: 饼图
import win.ui; /*DSG{{*/ var winform = win.form(text="aardio form";right=759;bottom=469) winform.add( static={cls="static";left=0;top=0;right=760;bottom=428;db=1;dl=1;dr=1;dt=1;notify=1;transparent=1;z=1} ) /*}}*/ import cchart; cchart.CreateChart(); cchart.Attach1(winform.static.hwnd,1);//kTypePie=1 饼图 cchart.ChooseCurChart1(winform.static.hwnd); cchart.AddPie1(28,"VB"); cchart.AddPie1(22,"C++"); cchart.AddPie1(21,"无名氏"); cchart.AddPie1(39,"aardio"); cchart.ReDraw2(); winform.onClose = function(hwnd,message,wParam,lParam){ cchart.Detach(winform.static.hwnd); cchart.DestroyChart(); } winform.show(); win.loopMessage(); return winform;
第六例: 柱状图
import win.ui; /*DSG{{*/ var winform = win.form(text="aardio form";right=759;bottom=469) winform.add( static={cls="static";left=0;top=0;right=760;bottom=465;db=1;dl=1;dr=1;dt=1;notify=1;transparent=1;z=1} ) /*}}*/ import cchart; cchart.CreateChart(); cchart.Attach1(winform.static.hwnd,2);//kTypeStem=2 柱图 cchart.ChooseCurChart1(winform.static.hwnd); var data = { double arr[4]={0}; }; data.arr[1]=28; data.arr[2]=22; data.arr[3]=21; data.arr[4]=39; cchart.AddStems(data,4); //显示图例 cchart.SetLegendShow(true,0) cchart.SetDataTitle("使用率1",0,0) cchart.SetStemLabel("VB",0); cchart.SetStemLabel("C++",1); cchart.SetStemLabel("无名氏",2); cchart.SetStemLabel("aardio",3); data.arr[1]=20; data.arr[2]=38; data.arr[3]=12; data.arr[4]=30; cchart.AddStems(data,4); cchart.SetLegendShow(true,1) cchart.SetDataTitle("使用率2",1,0) cchart.ReDraw2(); winform.onClose = function(hwnd,message,wParam,lParam){ cchart.Detach(winform.static.hwnd); cchart.DestroyChart(); } winform.show(); win.loopMessage(); return winform;
第七例: 动态显示波形(实时波形)
此例子在第一个折线图例子上添加定时器得来
方式1:波形压缩
import win.ui; /*DSG{{*/ var winform = win.form(text="aardio form";right=759;bottom=469) winform.add( button={cls="button";text="动起来";left=0;top=440;right=119;bottom=470;db=1;dl=1;z=2}; button2={cls="button";text="暂停";left=134;top=440;right=253;bottom=470;db=1;dl=1;z=3}; static={cls="static";left=0;top=0;right=760;bottom=428;db=1;dl=1;dr=1;dt=1;notify=1;transparent=1;z=1} ) /*}}*/ import cchart; cchart.CreateChart(); cchart.Attach1(winform.static.hwnd,0);//kTypeXY=0 折线图 cchart.ChooseCurChart1(winform.static.hwnd); //修改开屏版权提示 //cchart.SetDefMainString("hello aardio"); //cchart.SetDefSubString("这里是副提示信息..."); //设置显示网格 cchart.SetGridLine(true,true,true,true,0); //设置背景色 cchart.SetBkgndColor(0xFFE6C2,0); var timeid; var index = 0; //开定时器 timeid = winform.setInterval( 300,function(){ cchart.AddPoint2D(index, math.random(0,50) ,0,0); cchart.ReDraw2(); index++; } ); winform.button.oncommand = function(id,event){ //开定时器 winform.changeInterval(timeid,300); } winform.button2.oncommand = function(id,event){ if(timeid){ //暂停定时器 winform.changeInterval(timeid,-1); } } //防止闪烁 winform.static.onEraseBkgnd = function(hwnd,message,wParam,lParam){ return 0;//禁止擦除背景 }; winform.onClose = function(hwnd,message,wParam,lParam){ cchart.Detach(winform.static.hwnd); cchart.DestroyChart(); } winform.show(); win.loopMessage(); return winform;
方式2:波形清除
修改两处地方即可。
第八例: 三维线图个曲面图 (3dLine/surface)
import win.ui; /*DSG{{*/ var winform = win.form(text="aardio form";right=759;bottom=469) winform.add( static={cls="static";left=0;top=0;right=760;bottom=428;db=1;dl=1;dr=1;dt=1;notify=1;transparent=1;z=1} ) /*}}*/ import cchart; cchart.CreateChart(); cchart.Attach1(winform.static.hwnd,13);//kType3DSurface=13 3维曲面图 cchart.ChooseCurChart1(winform.static.hwnd); var x = { double arr[200] = {0} }; var y = { double arr[200] = {0} }; var z = { double arr[200] = {0} }; for(i=1;200;1){ x.arr[i] = 2.0*3.1415926536*i/200*5; ; y.arr[i] = math.cos(x.arr[i]); z.arr[i] = math.sin(x.arr[i]); } cchart.AddCurve2(x,y,z,200); cchart.ReDraw2(); winform.onClose = function(hwnd,message,wParam,lParam){ cchart.Detach(winform.static.hwnd); cchart.DestroyChart(); } winform.show(); win.loopMessage(); return winform;
第九例: 分裂图
import win.ui; /*DSG{{*/ var winform = win.form(text="aardio form";right=759;bottom=469) winform.add( static={cls="static";text="Static";left=0;top=0;right=760;bottom=466;db=1;dl=1;dr=1;dt=1;notify=1;transparent=1;z=1} ) /*}}*/ import cchart; winform.static.onEraseBkgnd = function(hwnd,message,wParam,lParam){ return 0;//禁止擦除背景 }; cchart.CreateChart(); cchart.Attach1(winform.static.hwnd,9);//kTypeSplit=9 分裂视图 cchart.ChooseCurChart1(winform.static.hwnd); //cchart.ReDraw2(); //第一个参数mode表示分裂的模式。查看Chart.h文件头部被注释掉的代码可知:mode=0表示不分裂;mode=1表示行列分裂;mode=2表示左一右二分裂;mode=3表示左二右一分裂;mode=3表示上一下二分裂;mode=4表示上二下一分裂 //第二个参数nRows表示分裂的行数,第三个参数nCols表示分裂的列数。这两个参数只有当mode=1时候才起作用,其它时候被忽略 cchart.ResizePlots1(2,1,2); var x = { double arr[200] = {0} }; var y = { double arr[200] = {0} }; for(i=1;200;1){ x.arr[i] = i ; y.arr[i] = 5.0*math.sin(i*2.0*3.14/360.0*3.0) ; } cchart.AddCurve1(x,y,200,0); cchart.AddAxis(0,0); for(i=1;200;1){ y.arr[i] = 2.0*math.sin(i*1.0*3.14/360.0*3.0) ; } cchart.AddCurve1(x,y,200,1); cchart.AddAxis(0,1) for(i=1;200;1){ y.arr[i] = math.sin(i*6.0*3.14/360.0*3.0) ; } cchart.AddCurve1(x,y,200,2); cchart.AddAxis(0,1) cchart.SetTitle("分裂图"); cchart.ReDraw2(); winform.onClose = function(hwnd,message,wParam,lParam){ cchart.Detach(winform.static.hwnd); cchart.DestroyChart(); } winform.show(); win.loopMessage(); return winform;
回复#13 @onecp :
我刚刚专门下载试了下, 没出现你那个问题,
这个dll是vc++编写的, 你这个问题有可能是c++运行库的缺失造成的,
你百度搜下 [VC运行库合集] ,或者从华军直接下载最新版VC运行库 https://www.onlinedown.net/soft/1164015.htm
安装下应该就可以了.
登录后方可回帖
添加双Y轴曲线图:(共享X轴曲线)