DalySprace 2022-08-03 18:02 采纳率: 100%
浏览 913
已结题

C#chart控件绘制出实时动态曲线,波形可以随时间刷新,但是X轴网格怎么向左移动呢?

【问题】C#chart控件绘制出实时动态曲线,波形可以随时间刷新,但是X轴网格怎么向左移动呢?
【详细描述】
(1)目前能够固定X轴时间间隔显示曲线
(2)横坐标刻度对应的轴线、以及刻度值尝试了很多方法没有实现“向左同步平移”的功能

//chart控件添加点绘制曲线的主要代码
chart1.Series[0].Points.AddXY(setX(), setY1());
 if (chart1.Series[0].Points.Count > 20)
        {                                      
                chart1.Series[0].Points.RemoveAt(0);
                chart1.Series[0].Points.AddXY(setX(), setY1());                   
         }

//其中,setX()和setY()是通过队列返回的X、Y坐标
 private Queue<string> getX = new Queue<string>();   //存储x坐标
 private Queue<Int32> getY = new Queue<int>();   //存储y坐标

【谢谢各位,望不吝赐教!】

img

  • 写回答

1条回答 默认 最新

  • wanghui0380 2022-08-04 11:07
    关注

    你要做的不是跟Chart费劲,你要做的是移动自己的数据

    我这里介绍一个出来快10年的官方库--哎,某园子这10年基本上没干啥有用的事情。废话文章天天飞,有用的实用的一概无视。
    一个10年前的实用库,而且是个成熟的库,你倒是没见他们那么积极。一个把netcore官方的命名空间改改的废物式的abp到折腾的带劲

    //我这里介绍一种rx的实现
    using System.Reactive.Linq;
    //因为我没有你的数据源,所以我自己产生一个
    //每300ms产生一个数据
    //下面这句就模拟了一个每隔300毫秒就产生一个long值的,并且带有时间戳的数据
    var mokedata = Observable.Interval(TimeSpan.FromMilliseconds(300))
        .Timestamp(); //前面一个只是数字,没有时间戳,我们加一个时间戳
      
     
    //我这个是控制台,我就不演示如何刷新数据了
    //我这里展示如何使用rx的操作符在连续数据源上进行移动窗口开窗操作
    //我这里演示的是按时间开窗,对于chart来说,我们一般是按时间刷新,所以我这里也选用按时间开窗
    mokedata.Buffer(TimeSpan.FromSeconds(1), TimeSpan.FromMilliseconds(500)) //含义为每次前移500毫秒返回移动后缓存1内值
        .Subscribe(p =>
            {
                Console.WriteLine("----------------窗口期数据开始------------");
    
                Console.WriteLine(string.Join(Environment.NewLine, p.Select(c=>$"{c.Timestamp}:{c.Value}")));
                Console.WriteLine("----------------窗口期数据结束------------");
            }
        );
    
    //你会看到的结果是每1秒给你一个List,同时这个list也包含上一个list的部分数据,因为窗口是平滑移动的
    //对于chart来说,我们一方面不想频繁刷新他,另一方面我们想表现数据的连续性,不想数据突变,所以采用平滑移动
    
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月12日
  • 已采纳回答 8月4日
  • 创建了问题 8月3日

悬赏问题

  • ¥15 我这个代码哪里有问题 acm 平台上显示错误 90%,我自己运行好像没什么问题
  • ¥50 C#编程中使用printDocument类实现文字排版打印问题
  • ¥15 找会编程的帅哥美女 可以用MATLAB里面的simulink编程,用Keil5编也可以。
  • ¥15 已知隐函数其中一个变量τ的具体值,求另一个变量
  • ¥15 r语言Hurst指数
  • ¥15 Acrn IVSHMEM doorbell问题
  • ¥15 yolov5中的val测试集训练时数量变小问题
  • ¥15 MPLS/VPN实验中MPLS的配置问题
  • ¥15 materialstudio氢键计算问题
  • ¥15 echarts图表制作