问题描述:实时显示采集的数据成趋势曲线。当在已有趋势图中再添加一条曲线时
1. 若X轴坐标设置label为value,正常
2.若X轴设为标签值(即时间)显示,数据重叠
我想让所有的趋势显示的X时间轴分刻度保持一致!
这个问题困扰了很长时间,求教有经验的前辈指点一二。
9 个解决方案
#1
自绘是早晚要学会的技能。
#2
仔细观察第二个图,至少应该是有2个时间显示的太近导致它们互相重叠。
TeeChart没有用过,不知道具体情况,但估计应该是可以设置显示的一些样式,比如密度、间隔什么的,可以尝试看下手册或者文档看有没有什么说明
TeeChart没有用过,不知道具体情况,但估计应该是可以设置显示的一些样式,比如密度、间隔什么的,可以尝试看下手册或者文档看有没有什么说明
#3
这个是一个控件,只能去使用没有源码
#4
恩,谢谢!
其实资料基本是英文的,而且用在VC方面的也不多。
#5
我下了一个 http://www.pc0359.cn/downinfo/39772.html,里面有很多种类型,不知道你用的是哪一种,你说下你是如何画出来这个图的,我试试,没有看到哪里可以设置x轴的label类型
#6
我用的是TeeChart 5,VC2010平台。
方法一:通过设置X轴为时间格式
1. CValueList类的put_DateTime(true)设置X轴为日期,CAxisAlbel类的成员函数put_DateTimeFormat(_T("hh:mm:ss"))设置X轴的格式
2. 定时器中,COleDateTime curTime = COleDateTime::GetCurrentTime();
通过CAxis的成员函数SetMinMax(curTime.m_dt - 300/86400. , curTime.m_dt)设置X轴范围,参数为double,随时间变动
3. 定时器中,CSeries的成员函数绘点 AddXY(curTime.dblX,Y值,_T(""),0)
缺陷:以上方法只能设置到秒,我想精确到毫秒(或者目前我个人没找到设置为毫秒的方法)
方法二:通过设置label标签为时间字符串实现
1. 在定时器中,获取当前时刻时间
SYSTEMTIME sys;
GetLocalTime(&sys); //获取系统时间
CString csTime;
csTime.Format(_T("%02d:%02d:%02d:%03d\r\n%04d-%02d-%02d"),sys.wHour,sys.wMinute,sys.wSecond,sys.wMillisec onds,sys.wYear,sys.wMonth,sys.wDay); //时间字符串,精确到毫秒
2. 定时器中绘点
int iCount = 0; (定为全局变量)
CSeries的成员函数AddXY(iCount,Y值,csTime,0);
3. 定时器中设置X轴范围,随时间变动
SetMinMax(iCount-1200,iCount)
4. 在TeeChart控件设置中,设X轴label显示为text
缺陷:在已有曲线的基础上添加一条时,X轴label字体会重叠,如第二张图所示
#7
具体使用的是哪一个类型的控件?
TeeChart ChartEditorPanel
TeeChart ChartGrid
TeeChart ChartGridNavigator
TeeChart ChartPageNavigator
TeeChart Commander
TeeChart Editor
TeeChart ListBox
TeeChart PreviewPanel
TeeChart Print Previewer
TeeChart Pro Activex control
TeeChart Series XML Source
TeeChart Series TestSource
TeeChart ChartEditorPanel
TeeChart ChartGrid
TeeChart ChartGridNavigator
TeeChart ChartPageNavigator
TeeChart Commander
TeeChart Editor
TeeChart ListBox
TeeChart PreviewPanel
TeeChart Print Previewer
TeeChart Pro Activex control
TeeChart Series XML Source
TeeChart Series TestSource
#8
#9
你好,问题解决了。
利用SYSTEMTIME sys;
GetLocalTime(&sys);获得毫秒值,除以1000转为double型
利用COleDateTime 的成员变量m_dt获得秒级的double值
两者相加
另外,TeeChart中put_DateTimeFormat(_T("hh:mm:ss.zzz)) 设置到毫秒
#1
自绘是早晚要学会的技能。
#2
仔细观察第二个图,至少应该是有2个时间显示的太近导致它们互相重叠。
TeeChart没有用过,不知道具体情况,但估计应该是可以设置显示的一些样式,比如密度、间隔什么的,可以尝试看下手册或者文档看有没有什么说明
TeeChart没有用过,不知道具体情况,但估计应该是可以设置显示的一些样式,比如密度、间隔什么的,可以尝试看下手册或者文档看有没有什么说明
#3
这个是一个控件,只能去使用没有源码
#4
恩,谢谢!
其实资料基本是英文的,而且用在VC方面的也不多。
#5
我下了一个 http://www.pc0359.cn/downinfo/39772.html,里面有很多种类型,不知道你用的是哪一种,你说下你是如何画出来这个图的,我试试,没有看到哪里可以设置x轴的label类型
#6
我用的是TeeChart 5,VC2010平台。
方法一:通过设置X轴为时间格式
1. CValueList类的put_DateTime(true)设置X轴为日期,CAxisAlbel类的成员函数put_DateTimeFormat(_T("hh:mm:ss"))设置X轴的格式
2. 定时器中,COleDateTime curTime = COleDateTime::GetCurrentTime();
通过CAxis的成员函数SetMinMax(curTime.m_dt - 300/86400. , curTime.m_dt)设置X轴范围,参数为double,随时间变动
3. 定时器中,CSeries的成员函数绘点 AddXY(curTime.dblX,Y值,_T(""),0)
缺陷:以上方法只能设置到秒,我想精确到毫秒(或者目前我个人没找到设置为毫秒的方法)
方法二:通过设置label标签为时间字符串实现
1. 在定时器中,获取当前时刻时间
SYSTEMTIME sys;
GetLocalTime(&sys); //获取系统时间
CString csTime;
csTime.Format(_T("%02d:%02d:%02d:%03d\r\n%04d-%02d-%02d"),sys.wHour,sys.wMinute,sys.wSecond,sys.wMillisec onds,sys.wYear,sys.wMonth,sys.wDay); //时间字符串,精确到毫秒
2. 定时器中绘点
int iCount = 0; (定为全局变量)
CSeries的成员函数AddXY(iCount,Y值,csTime,0);
3. 定时器中设置X轴范围,随时间变动
SetMinMax(iCount-1200,iCount)
4. 在TeeChart控件设置中,设X轴label显示为text
缺陷:在已有曲线的基础上添加一条时,X轴label字体会重叠,如第二张图所示
#7
具体使用的是哪一个类型的控件?
TeeChart ChartEditorPanel
TeeChart ChartGrid
TeeChart ChartGridNavigator
TeeChart ChartPageNavigator
TeeChart Commander
TeeChart Editor
TeeChart ListBox
TeeChart PreviewPanel
TeeChart Print Previewer
TeeChart Pro Activex control
TeeChart Series XML Source
TeeChart Series TestSource
TeeChart ChartEditorPanel
TeeChart ChartGrid
TeeChart ChartGridNavigator
TeeChart ChartPageNavigator
TeeChart Commander
TeeChart Editor
TeeChart ListBox
TeeChart PreviewPanel
TeeChart Print Previewer
TeeChart Pro Activex control
TeeChart Series XML Source
TeeChart Series TestSource
#8
#9
你好,问题解决了。
利用SYSTEMTIME sys;
GetLocalTime(&sys);获得毫秒值,除以1000转为double型
利用COleDateTime 的成员变量m_dt获得秒级的double值
两者相加
另外,TeeChart中put_DateTimeFormat(_T("hh:mm:ss.zzz)) 设置到毫秒