使用动态数据显示绘制折线图?

Posted

技术标签:

【中文标题】使用动态数据显示绘制折线图?【英文标题】:draw Broken line graph using dynamic data display? 【发布时间】:2015-04-20 19:41:14 【问题描述】:

我可以使用动态数据显示绘制折线图吗?

在我的应用程序中,我需要实时绘制voltage/time graph.My requirement,只有当电压不是0 时,我才应该绘制图形线。

我怎样才能做到这一点?

我尝试了以下方法:

public partial class MainWindow : Window
    
        public ObservableDataSource<Point> source1 = null;
        public ObservableDataSource<Point> source2 = null;
        public ObservableDataSource<Point> source3 = null;
        public ObservableDataSource<Point> source4 = null;
        public ObservableDataSource<Point> source5 = null;
        public MainWindow()
        
            InitializeComponent();
            this.Loaded += MainWindow_Loaded;
        

        private void MainWindow_Loaded(object sender, RoutedEventArgs e)
                
            source1 = new ObservableDataSource<Point>();
            source2 = new ObservableDataSource<Point>();
            source3 = new ObservableDataSource<Point>();
            source4 = new ObservableDataSource<Point>();
            source5 = new ObservableDataSource<Point>();
            source1.SetXYMapping(p => p);

            testchart.AddLineGraph(source1, 1, "Data row");
            testchart.AddLineGraph(source2, Color.FromRgb(7, 10, 67), 1, "Data row");
            testchart.AddLineGraph(source3, Color.FromRgb(6, 5, 5), 1, "Data row");
            testchart.AddLineGraph(source4, Color.FromRgb(10, 6, 7), 1, "Data row");
            testchart.AddLineGraph(source5, Color.FromRgb(20, 8, 9), 1, "Data row");
            testchart.Viewport.FitToView();
            Thread simThread = new Thread(new ThreadStart(Simulation));
            simThread.IsBackground = true;
            simThread.Start();
        

        private void Simulation()
        
            int i = 0;
            while (true)
            
                Point p1 = new Point(i * 10, i*10);
                if (i % 2 == 0)//here i tried to break first line in the graph
                
                    source1.AppendAsync(Dispatcher, p1);
                
                else
                
                    Point p5 = new Point(Math.Sign(i*10),i*10);
                    source5.AppendAsync(Dispatcher, p5);
                

                Point p2 = new Point(i *50, i*10);
                source2.AppendAsync(Dispatcher, p2);
                Point p3 = new Point(i * 1000, i);
                source3.AppendAsync(Dispatcher, p3);
                Point p4 = new Point(i * 1500, i);
                source4.AppendAsync(Dispatcher, p4);
                i++;
                Thread.Sleep(1000);

            
        

【问题讨论】:

这是测试应用程序。这里我只是使用方法模拟添加点。 它是一个图表绘图仪 是的,来自 Codeplex 我目前无法访问 codeplex 来尝试...邪恶的代理设置 =P ...但是 observabledatasource 的实现是什么。这是你做的还是某个图书馆? 我认为这会使用新数据发出一些事件,并且图表控件会将它们放在视图上。所以完成这项工作的关键就在那里......或者你编写一个适配器来抑制 Y=0 的事件 【参考方案1】:

当最后一个数据点的 Y 大于 0 时,您需要一个发出新的 ObservableDataSources(或您可以停止发出新点的适配器)的类。每当电压为 0 时,您需要让 UI 停止侦听该数据源。当电压>0并且您在那里时,您发出一个事件并向图表添加另一个线图..

【讨论】:

以上是关于使用动态数据显示绘制折线图?的主要内容,如果未能解决你的问题,请参考以下文章

java生成饼状图,条形图,折线图的技术可以动态的显示

echarts折线图动态改变数据时的一个bug

如何使用websocket在网页上动态示实时数据的折线图

C#使用chart绘制实时折线图,波形图叠加

WPS如何制作动态折线图?随在WPS里面如何做到折线图自动随数据增加而变化??要写出具体步骤

Extjs 4 动态显示折线图 按秒显示