图片地址:https://blog.csdn.net/qq_33459369/article/details/80060196;(盗图)

接下来是封装的代码

#region 动态折线图
public LineChartHelper(ChartControl chart)
{
LineSeriesView lineSeriesView = new LineSeriesView();
chart.SeriesTemplate.View = lineSeriesView;
//Legend的位置
chart.Legend.AlignmentHorizontal = DevExpress.XtraCharts.LegendAlignmentHorizontal.Left;
chart.Legend.AlignmentVertical = DevExpress.XtraCharts.LegendAlignmentVertical.TopOutside;
chart.Legend.Direction = DevExpress.XtraCharts.LegendDirection.RightToLeft;
//x轴为时间轴
XYDiagram diagram = (XYDiagram)chart.Diagram;
diagram.AxisX.DateTimeScaleOptions.MeasureUnit = DateTimeMeasureUnit.Millisecond;
diagram.AxisX.DateTimeScaleOptions.ScaleMode = ScaleMode.Continuous;
} public Series[] CreateSeries(ChartControl chart, List<string> names)
{
chart.Series.Clear();//清除Series
int num = names.Count();
Series[] series = new Series[num];
for (int i = ; i < num; i++)
{
series[i] = CreateSeries(names[i], ViewType.Line);
}
return series;
}
/// <summary>
/// 创建折线
/// </summary>
private Series CreateSeries(string caption, ViewType viewType)
{
Series series = new Series(caption, viewType);
//必须设置ArgumentScaleType的类型,否则显示会转换为日期格式,导致不是希望的格式显示
//也就是说,显示字符串的参数,必须设置类型为ScaleType.Qualitative
series.ArgumentScaleType = ScaleType.Auto;
series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True;//显示标注标签
//回归线
LineSeriesView lineSeriesView = new LineSeriesView();
RegressionLine regressionLine = new RegressionLine();
regressionLine.Name = caption + "";
lineSeriesView.Indicators.AddRange(new DevExpress.XtraCharts.Indicator[] { regressionLine });
series.View = lineSeriesView;
return series;
}
/// <summary>
/// 移除不在视图显示的Points数据
/// </summary>
/// <param name="series">曲线</param>
/// <param name="minDate">时间线</param>
public void RemovePoint(DateTime minDate, Series[] series)
{
int pointsToRemoveCount = ;//曲线节点数据
foreach (SeriesPoint point in series[].Points)
{
if (point.DateTimeArgument < minDate)
pointsToRemoveCount++;
}
if (pointsToRemoveCount < series[].Points.Count)
{
pointsToRemoveCount--;
}
if (pointsToRemoveCount > )
{
for (int i = ; i < series.Count(); i++)
{
series[i].Points.RemoveRange(, pointsToRemoveCount);
}
}
}
/// <summary>
/// 添加数据到曲线节点
/// </summary>
public void AddPoints(Series series, DateTime argument, double value)
{
if (series.View is LineSeriesView)
{
series.Points.Add(new SeriesPoint(argument, value));
}
}
/// <summary>
/// 设置x轴数据
/// </summary>
public void SetX(ChartControl chart, DateTime minDate, DateTime argument)
{
XYDiagram diagram = (XYDiagram)chart.Diagram;
if (diagram != null && (diagram.AxisX.DateTimeScaleOptions.MeasureUnit == DateTimeMeasureUnit.Millisecond || diagram.AxisX.DateTimeScaleOptions.ScaleMode == ScaleMode.Continuous))
{
diagram.AxisX.WholeRange.SetMinMaxValues(minDate, argument);
}
}
/// <summary>
/// 获取曲线的回归线
/// </summary>
public RegressionLine GetRegressionLine(Series series)
{
if (series != null)
{
SwiftPlotSeriesView swiftPlotView = series.View as SwiftPlotSeriesView;
if (swiftPlotView != null)
{
Console.Write(swiftPlotView.Indicators);
foreach (Indicator indicator in swiftPlotView.Indicators)
{
RegressionLine regressionLine = indicator as RegressionLine;
if (regressionLine != null)
return regressionLine;
}
}
}
return null;
}
#endregion

调用代码

        private readonly Random random = new Random();
private Series[] _series;
private LineChartHelper _lineChartHelper;
private int _num = ; public frmRealtimeLineChart()
{
InitializeComponent(); } private void frmRealtimeLineChart_Load(object sender, EventArgs e)
{
Init();
} private void Init()
{
_lineChartHelper = new LineChartHelper(chart);
List<string> names = new List<string>() { "曲线一", "折线二", "数字三" };
_series = _lineChartHelper.CreateSeries(chart, names);
_num = names.Count();
chart.SeriesSerializable = _series; XYDiagram diagram = (XYDiagram)chart.Diagram;
diagram.AxisX.GridLines.MinorVisible = true;
diagram.AxisX.GridLines.Visible = true;
diagram.AxisX.Label.TextPattern = "@{A:HH:mm:ss}";
diagram.AxisX.Title.Font = new System.Drawing.Font("Tahoma", 9F);
diagram.AxisX.Title.Text = @"时间(分)";
diagram.AxisX.Title.Visible = true;
diagram.AxisX.VisibleInPanesSerializable = "-1"; diagram.AxisX.WholeRange.Auto = true;
diagram.AxisX.WholeRange.SideMarginsValue = ;
diagram.AxisX.Interlaced = true;
diagram.AxisY.WholeRange.AlwaysShowZeroLevel = false; diagram.AxisY.Title.Font = new System.Drawing.Font("Tahoma", 9F);
diagram.AxisY.Title.Text = @"随机数";
diagram.AxisY.Title.Visible = true;
diagram.AxisY.VisibleInPanesSerializable = "-1";
} private void timer_Tick(object sender, EventArgs e)
{
RealtimeChart();
} private void RealtimeChart()
{
try
{
DateTime argument = DateTime.Now;//x轴
for (int i = ; i < _num; i++)
{
_lineChartHelper.AddPoints(_series[i], argument, CalculateNextValue());
}
DateTime minDate = argument.AddSeconds(-TimeInterval);//x轴时间曲度
_lineChartHelper.RemovePoint(minDate, _series);
_lineChartHelper.SetX(chart, minDate, argument);
}
catch (Exception ex)
{
Console.Write(ex);
}
} /// <summary>
/// 随机数
/// </summary>
private double CalculateNextValue()
{
return Math.Round(random.NextDouble() * 100.0);
} /// <summary>
/// 间隔时间
/// </summary>
private int TimeInterval { get { return Convert.ToInt32(spnTimeInterval.EditValue); } }

直接拖入chart,选择折线图,效果如下:

dev linechart动态加载数据(像股票一样的波动)的更多相关文章

  1. AppCan学习笔记----关闭页面listview动态加载数据

    AppCan页面关闭 AppCan 的页面是由两个HTML组成,如果要完全关闭的话需要在主HTML eg.index.html中关闭,关闭方法:appcan.window.close(-1); 管道 ...

  2. [JS前端开发] js/jquery控制页面动态加载数据 滑动滚动条自动加载事件

    页面滚动动态加载数据,页面下拉自动加载内容 相信很多人都见过瀑布流图片布局,那些图片是动态加载出来的,效果很好,对服务器的压力相对来说也小了很多 有手机的相信都见过这样的效果:进入qq空间,向下拉动空 ...

  3. 微信小程序(五) 利用模板动态加载数据

    利用模板动态加载数据,其实是对上一节静态数据替换成动态数据:

  4. mui 动态加载数据出现的问题处理 (silder轮播组件 indexedList索引列表 下拉刷新不能继续加载数据)

    mui-slider 问题:动态给mui的图片轮播添加图片,轮播不滚动. 解决:最后把滚动轮播图片的mui(".mui-slider").slider({interval: 300 ...

  5. ASP.NET MVC动态加载数据

    ASP.NET MVC动态加载数据,一般的做法是使用$.each方法来循环产生tabel: 你可以在html时先写下非动态的部分:  Source Code 上图中,有一行代码: <tbody ...

  6. js实现滚动条来动态加载数据

    主要angular2+es6 data:Array<any> //展示的数据 allData:Array<any> //全部的数据 size:number = 10 //每次动 ...

  7. js/jquery控制页面动态加载数据 滑动滚动条自动加载事件--转他人的

    js/jquery控制页面动态加载数据 滑动滚动条自动加载事件--转他人的 相信很多人都见过瀑布流图片布局,那些图片是动态加载出来的,效果很好,对服务器的压力相对来说也小了很多 有手机的相信都见过这样 ...

  8. js动态加载数据并合并单元格

    js动态加载数据合并单元格, 代码如下所示,可复制直接运行: <!DOCTYPE HTML> <html lang="en-US"> <head> ...

  9. 爬虫--selenuim和phantonJs处理网页动态加载数据的爬取

    1.谷歌浏览器的使用 下载谷歌浏览器 安装谷歌访问助手 终于用上谷歌浏览器了.....激动 问题:处理页面动态加载数据的爬取 -1.selenium -2.phantomJs 1.selenium 二 ...

随机推荐

  1. 用JS判断号码

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Connection

    作用: * 获取执行sql语句对象 ** createStatement(): 获取Statement对象 ** prepareStatement(String sql): 获取预处理对象 ** pr ...

  3. 安装mysql问题解决

    [root@apollo init.d]# /etc/init.d/mysqld startmy_print_defaults: Can't read dir of '/etc/my.cnf.' (E ...

  4. 002-log-log4j

    一.概述 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护 ...

  5. Oracle11g安装与卸载教程

    1.1,前言: 电脑太卡,鄙人穷屌丝啊,没钱买新电脑,想想周六日还要耍游戏就给电脑重做了个系统,糟糕的是电脑上的各种环境,工具都需要重新装一边,包括oracle数据库- -,依稀记得昨天装了一上午的数 ...

  6. java.lang.IllegalStateException: No primary or default constructor found for class java.time.LocalDate

    转载自:https://blog.csdn.net/Coder_Arley/article/details/81910705 springboot中报错如下: springmvc也可以使用类似处理方法 ...

  7. 强化学习——Q-learning算法

    假设有这样的房间     如果将房间表示成点,然后用房间之间的连通关系表示成线,如下图所示:       这就是房间对应的图.我们首先将agent(机器人)处于任何一个位置,让他自己走动,直到走到5房 ...

  8. 前端入门系列之HTML

    前端入门系列之HTML 超文本标记语言 (英语:Hypertext Markup Language,简称:HTML ) 是一种用来结构化 Web 网页及其内容的标记语言.网页内容可以是:一组段落.一个 ...

  9. vue加载优化方案

    我们的项目随着组件的加入,首次加载的js文件越来越大,用户等待时间越来越长:之前想着使用webpack的splitCoding来解决,看了webpack的官方文档可以配置optimization的 m ...

  10. hdoj1711(kmp算法)

    题目链接:https://www.cnblogs.com/kuangbin/archive/2012/08/14/2638803.html 题意:给定两个数组a.b,在数组a中查找b,求第一次出现的下 ...