delphi TChart横轴时间不连续时的显示问题

baidu_20187139 2014-08-29 04:32:23
TChart的横轴坐标时间不连续时中间会出现大量的点挤在一块,如何能让时间显示平滑的过渡过来,如图所示前面一段时间是连续且均匀变化的,中间一段时间没有数据,过段时间后又有数据,TChart显示时会出现好多重叠点,该如何解决?请大神指教;
代码:
for I:=0 to Length do
begin
ChartPreview.Series[0].AddXY(bufData[I].recvtime,bufData[I].Power);
end;
bufData是一个结构体数组,已从数据库中读出并赋值,数据库中的数据时间不是连续的,有可能中间会隔几天没有数据。
...全文
627 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
hj8090 2014-09-01
  • 打赏
  • 举报
回复
引用 6 楼 baidu_20187139 的回复:
引用 3 楼 hj3000 的回复:
X值用递增的INT就可以。
要求是X轴是要用时间表示,不能用整数,我想的有没有一种方法把中间没有数据的X值去掉,直接过渡到后面的数据,比如X值依次为(2014-8-1 8:00:00 ), (2014-8-1 9:00:00 ), (2014-8-1 10:00:00 ), (2014-8-1 11:00:00 ) (2014-8-30 9:00:00 ) ,(2014-8-30 10:00:00 ),(2014-8-30 11:00:00 ) .我的数据是这样的
ChartPreview.Series[0].AddXY( I ,bufData[I].Power, bufData[I].recvtime.tostring ); inc(I)
baidu_20187139 2014-09-01
  • 打赏
  • 举报
回复
引用 8 楼 seleron 的回复:
[quote=引用 7 楼 baidu_20187139 的回复:] [quote=引用 4 楼 seleron 的回复:] [quote=引用 2 楼 baidu_20187139 的回复:] 同一个X值上只有一个Y值,只是中间相隔的时间比较大,后面的数据较少,所少都挤到一块了,我就是想知道如何把时间排开.
把x轴的单位设置的大些,使得x轴可以显示更多的时间[/quote]要求是X轴是要用时间表示,不能用整数,我想的有没有一种方法把中间没有数据的X值去掉,直接过渡到后面的数据,比如X值依次为(2014-8-1 8:00:00 ), (2014-8-1 9:00:00 ), (2014-8-1 10:00:00 ), (2014-8-1 11:00:00 ) (2014-8-30 9:00:00 ) ,(2014-8-30 10:00:00 ),(2014-8-30 11:00:00 ) .我的数据是这样的,至少每隔1小时一个点,但是中间有可能隔了好几天,甚至几个月才有新数据。[/quote] 那就得处理数据了,将数据来源中的数据调整好后再显示在TChar上。[/quote]时间不能调整,就是天气预报一样,我接收了一天的数据之后可以隔几天再接收数据,只显示有数据有时间段。
程晨c 2014-09-01
  • 打赏
  • 举报
回复
引用 7 楼 baidu_20187139 的回复:
[quote=引用 4 楼 seleron 的回复:] [quote=引用 2 楼 baidu_20187139 的回复:] 同一个X值上只有一个Y值,只是中间相隔的时间比较大,后面的数据较少,所少都挤到一块了,我就是想知道如何把时间排开.
把x轴的单位设置的大些,使得x轴可以显示更多的时间[/quote]要求是X轴是要用时间表示,不能用整数,我想的有没有一种方法把中间没有数据的X值去掉,直接过渡到后面的数据,比如X值依次为(2014-8-1 8:00:00 ), (2014-8-1 9:00:00 ), (2014-8-1 10:00:00 ), (2014-8-1 11:00:00 ) (2014-8-30 9:00:00 ) ,(2014-8-30 10:00:00 ),(2014-8-30 11:00:00 ) .我的数据是这样的,至少每隔1小时一个点,但是中间有可能隔了好几天,甚至几个月才有新数据。[/quote] 那就得处理数据了,将数据来源中的数据调整好后再显示在TChar上。
baidu_20187139 2014-09-01
  • 打赏
  • 举报
回复
引用 4 楼 seleron 的回复:
[quote=引用 2 楼 baidu_20187139 的回复:] 同一个X值上只有一个Y值,只是中间相隔的时间比较大,后面的数据较少,所少都挤到一块了,我就是想知道如何把时间排开.
把x轴的单位设置的大些,使得x轴可以显示更多的时间[/quote]要求是X轴是要用时间表示,不能用整数,我想的有没有一种方法把中间没有数据的X值去掉,直接过渡到后面的数据,比如X值依次为(2014-8-1 8:00:00 ), (2014-8-1 9:00:00 ), (2014-8-1 10:00:00 ), (2014-8-1 11:00:00 ) (2014-8-30 9:00:00 ) ,(2014-8-30 10:00:00 ),(2014-8-30 11:00:00 ) .我的数据是这样的,至少每隔1小时一个点,但是中间有可能隔了好几天,甚至几个月才有新数据。
baidu_20187139 2014-09-01
  • 打赏
  • 举报
回复
引用 3 楼 hj3000 的回复:
X值用递增的INT就可以。
要求是X轴是要用时间表示,不能用整数,我想的有没有一种方法把中间没有数据的X值去掉,直接过渡到后面的数据,比如X值依次为(2014-8-1 8:00:00 ), (2014-8-1 9:00:00 ), (2014-8-1 10:00:00 ), (2014-8-1 11:00:00 ) (2014-8-30 9:00:00 ) ,(2014-8-30 10:00:00 ),(2014-8-30 11:00:00 ) .我的数据是这样的
baidu_20187139 2014-09-01
  • 打赏
  • 举报
回复
要求是X轴是要用时间表示,不能用整数,我想的有没有一种方法把中间没有数据的X值去掉,直接过渡到后面的数据,比如X值依次为(2014-8-1 8:00:00 ), (2014-8-1 9:00:00 ), (2014-8-1 10:00:00 ), (2014-8-1 11:00:00 ) (2014-8-30 9:00:00 ) ,(2014-8-30 10:00:00 ),(2014-8-30 11:00:00 ) .我的数据是这样的
程晨c 2014-09-01
  • 打赏
  • 举报
回复
引用 2 楼 baidu_20187139 的回复:
同一个X值上只有一个Y值,只是中间相隔的时间比较大,后面的数据较少,所少都挤到一块了,我就是想知道如何把时间排开.
把x轴的单位设置的大些,使得x轴可以显示更多的时间
hj8090 2014-09-01
  • 打赏
  • 举报
回复
X值用递增的INT就可以。
baidu_20187139 2014-09-01
  • 打赏
  • 举报
回复
同一个X值上只有一个Y值,只是中间相隔的时间比较大,后面的数据较少,所少都挤到一块了,我就是想知道如何把时间排开.
baidu_20187139 2014-09-01
  • 打赏
  • 举报
回复
引用 10 楼 hj3000 的回复:
引用 6 楼 baidu_20187139 的回复:
[quote=引用 3 楼 hj3000 的回复:] X值用递增的INT就可以。
要求是X轴是要用时间表示,不能用整数,我想的有没有一种方法把中间没有数据的X值去掉,直接过渡到后面的数据,比如X值依次为(2014-8-1 8:00:00 ), (2014-8-1 9:00:00 ), (2014-8-1 10:00:00 ), (2014-8-1 11:00:00 ) (2014-8-30 9:00:00 ) ,(2014-8-30 10:00:00 ),(2014-8-30 11:00:00 ) .我的数据是这样的
ChartPreview.Series[0].AddXY( I ,bufData[I].Power, bufData[I].recvtime.tostring ); inc(I)[/quote]此方法可行,问题已解决、谢谢、哈哈
程晨c 2014-09-01
  • 打赏
  • 举报
回复
baidu_20187139 2014-09-01
  • 打赏
  • 举报
回复
引用 10 楼 hj3000 的回复:
引用 6 楼 baidu_20187139 的回复:
[quote=引用 3 楼 hj3000 的回复:]
X值用递增的INT就可以。
要求是X轴是要用时间表示,不能用整数,我想的有没有一种方法把中间没有数据的X值去掉,直接过渡到后面的数据,比如X值依次为(2014-8-1 8:00:00 ), (2014-8-1 9:00:00 ), (2014-8-1 10:00:00 ), (2014-8-1 11:00:00 ) (2014-8-30 9:00:00 ) ,(2014-8-30 10:00:00 ),(2014-8-30 11:00:00 ) .我的数据是这样的


ChartPreview.Series[0].AddXY( I ,bufData[I].Power, bufData[I].recvtime.tostring );
inc(I)[/quote]
dtString := FormatDateTime('yyyy-mm-dd hh:mm:ss', bufData[I].recvtime);
ChartPreview.Series[0].AddXY(I, bufData[I].Power, dtString);按照这种方法是能均匀的显示出来,但是为什么显示的时间不对啊???我单步跟踪的时间都是对的,请指教、
baidu_20187139 2014-09-01
  • 打赏
  • 举报
回复
引用 10 楼 hj3000 的回复:
引用 6 楼 baidu_20187139 的回复:
[quote=引用 3 楼 hj3000 的回复:]
X值用递增的INT就可以。
要求是X轴是要用时间表示,不能用整数,我想的有没有一种方法把中间没有数据的X值去掉,直接过渡到后面的数据,比如X值依次为(2014-8-1 8:00:00 ), (2014-8-1 9:00:00 ), (2014-8-1 10:00:00 ), (2014-8-1 11:00:00 ) (2014-8-30 9:00:00 ) ,(2014-8-30 10:00:00 ),(2014-8-30 11:00:00 ) .我的数据是这样的


ChartPreview.Series[0].AddXY( I ,bufData[I].Power, bufData[I].recvtime.tostring );
inc(I)[/quote]我按照你说的方法报这个错是什么情况啊??
hj8090 2014-08-29
  • 打赏
  • 举报
回复
一看就是你数据分布有问题,同一个X点上有多个Y值。 Chart只是按数据显示,数据要自己处理。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧