找回密码
 立即注册

QQ登录

只需一步,快速开始

mingcedar

高级会员

5

主题

35

帖子

1570

积分

高级会员

积分
1570

活字格认证

mingcedar
高级会员   /  发表于:2013-11-4 19:45  /   查看:19009  /  回复:27
问题1:当滚动条显示时,如何取得Chart当前显示区域X轴/Y轴的最大/小值?不是Max和Min。

问题2:现在在Chart中需要显示大量数据,性能不好,有何时办法。
         需要显示100条曲线,每条线20000个点。此时Chart操作特别慢,有什么好的解决方案吗?

27 个回复

倒序浏览
roger.wang
社区贡献组   /  发表于:2013-11-5 08:52:00
沙发
回复 1楼mingcedar的帖子

能把demo上传吗?

我这里模拟你的场景需要些时间,如demo上传,解决问题的时间会大大加快的。
回复 使用道具 举报
mingcedar
高级会员   /  发表于:2013-11-5 13:30:00
板凳
谢谢回复,代码见附件。

是根据ComponentOne自带的例子(LargeData)改造的。
当Chart放大后,滚动条滚动到某位置时,如何取得X轴和Y轴在当前显示区域内的最大值和最小值。
数据很大时,性能不好,如何优化。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2013-11-5 13:57:00
地板
回复 3楼mingcedar的帖子

好的,谢谢支持。

我找找原因。
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2013-11-5 16:14:00
5#
回复 3楼mingcedar的帖子

1 找X轴最大、最小数据, 稍微麻烦一点,通过下面的这个static类试试:
  1. public static class AxisExtension
  2. {

  3.     public static double GetDispMin(this Axis axis)
  4.     {

  5.         return axis.ActualMin + axis.Value *

  6.             (axis.ActualMax - axis.ActualMin) * (1 - axis.Scale);

  7.     }

  8.     public static double GetDispMax(this Axis axis)
  9.     {

  10.         return axis.ActualMax - (1 - axis.Value) *

  11.             (axis.ActualMax - axis.ActualMin) * (1 - axis.Scale);

  12.     }

  13. }
复制代码


2 大数据--C1Chart,目前没有找到能解决你遇到的办法 (200万数据=100条线 × 2万数据)
我试过C1官网的几种办法:http://helpcentral.componentone. ... forsilverlightt.htm
甚至使用了:
XYDataSeries
ds.RenderMode = RenderMode.Bitmap;
效果不明显。

建议你不要一次呈现这么多数据量。
或者您能把业务场景告之的细一些,我看看有无其他的曲线解决办法。
回复 使用道具 举报
mingcedar
高级会员   /  发表于:2013-11-5 17:11:00
6#
回复 5楼roger.wang的帖子

非常感谢!我试试
问一下,RenderMode是做什么的,有什么用?

业务场景是:
有个硬件设备,具有100多个采集终端,在移动中进行同步采样,匀速移动几十米,采样20000次,
把得到的采样数据(电压值)显示在Chart中。
在Chart中可以缩放、平移,查看某个区域的电压波动情况。

另外,再追问一下,C1Chart中,可以加背景吗?要求Chart放缩时背景随着放缩。
我试了C1Chart中几种内部控件的BackGround属性,都是只能放大到Chart的可视大小后,不能再大了。
用Layers属性,可以继续放大,但Layers中的图显示在上层,会把曲线挡住。
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2013-11-5 19:11:00
7#
回复 6楼mingcedar的帖子


感谢理解

1 RenderMode 是用来呈现数据渲染方式的:
  枚举参考:http://helpcentral.componentone. ... hart_RenderMode.htm

2 你说的业务场景很复杂,在这个领域,您是专家。
  我的建议是:对于Chart呈现超过50万以上的数据,需要考虑多Chart处理。
  如对100个设备安装区域、业务特点分组。 每组10个设备, 这样画出的线也可以看清。
  另外,demo中造的数据,邻接的2个点值都不一样,C1Chart提供的抽样呈现提高优化用不上,而实际采样的电压值,是否不会出现频繁变动值呢?  如果连续变更的频率低,则C1Chart呈现的效率会比demo高的多。
LineAreaOptions.SetOptimizationRadius(c1Chart1, 10); http://helpcentral.componentone. ... dius_2_02f2ce73.htm

3 你说的这种加背景的,目前我了解的,无法实现,不好意思。
  方便的话,把你的demo给个看看,我看看能否试着解决。
回复 使用道具 举报
mingcedar
高级会员   /  发表于:2013-11-5 20:55:00
8#
回复 7楼roger.wang的帖子

因为所有数据要有放大、缩小操作,所以不能分成多个Chart显示,那样彼此就脱节了。
由于论坛限制附件大小,我上传到以下位置了,你从这下载吧。麻烦了。

http://files.cnblogs.com/mingcedar/Demo.zip
(本回复中显示的Demo.zip 659.63 K文件,不完整,从cnblogs的链接下载吧。)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
mingcedar
高级会员   /  发表于:2013-11-5 21:22:00
9#
找X轴最大、最小数据的问题,用你给的方法可以取到,多谢!
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2013-11-6 08:52:00
10#
回复 8楼mingcedar的帖子

好的,我下载先看看再说。
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部