dev linechart动态加载数据(像股票一样的波动)
图片地址: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动态加载数据(像股票一样的波动)的更多相关文章
- AppCan学习笔记----关闭页面listview动态加载数据
AppCan页面关闭 AppCan 的页面是由两个HTML组成,如果要完全关闭的话需要在主HTML eg.index.html中关闭,关闭方法:appcan.window.close(-1); 管道 ...
- [JS前端开发] js/jquery控制页面动态加载数据 滑动滚动条自动加载事件
页面滚动动态加载数据,页面下拉自动加载内容 相信很多人都见过瀑布流图片布局,那些图片是动态加载出来的,效果很好,对服务器的压力相对来说也小了很多 有手机的相信都见过这样的效果:进入qq空间,向下拉动空 ...
- 微信小程序(五) 利用模板动态加载数据
利用模板动态加载数据,其实是对上一节静态数据替换成动态数据:
- mui 动态加载数据出现的问题处理 (silder轮播组件 indexedList索引列表 下拉刷新不能继续加载数据)
mui-slider 问题:动态给mui的图片轮播添加图片,轮播不滚动. 解决:最后把滚动轮播图片的mui(".mui-slider").slider({interval: 300 ...
- ASP.NET MVC动态加载数据
ASP.NET MVC动态加载数据,一般的做法是使用$.each方法来循环产生tabel: 你可以在html时先写下非动态的部分: Source Code 上图中,有一行代码: <tbody ...
- js实现滚动条来动态加载数据
主要angular2+es6 data:Array<any> //展示的数据 allData:Array<any> //全部的数据 size:number = 10 //每次动 ...
- js/jquery控制页面动态加载数据 滑动滚动条自动加载事件--转他人的
js/jquery控制页面动态加载数据 滑动滚动条自动加载事件--转他人的 相信很多人都见过瀑布流图片布局,那些图片是动态加载出来的,效果很好,对服务器的压力相对来说也小了很多 有手机的相信都见过这样 ...
- js动态加载数据并合并单元格
js动态加载数据合并单元格, 代码如下所示,可复制直接运行: <!DOCTYPE HTML> <html lang="en-US"> <head> ...
- 爬虫--selenuim和phantonJs处理网页动态加载数据的爬取
1.谷歌浏览器的使用 下载谷歌浏览器 安装谷歌访问助手 终于用上谷歌浏览器了.....激动 问题:处理页面动态加载数据的爬取 -1.selenium -2.phantomJs 1.selenium 二 ...
随机推荐
- 以太坊联盟链 parity 节点搭建
https://www.cnblogs.com/sumingk/articles/9097996.html 上一篇文章介绍了以太坊私有链 geth节点的搭建,本篇介绍下企业级应用 联盟链搭建,运用pa ...
- Qt自定义委托在QTableView中绘制控件、图片、文字
自定义委托,继承于,QStyledItemDelegate类,重载Paint()函数, 1.实现在QTableView中绘制 格式字符串 2.实现在QTableView中绘制进度条 3.实现在QTab ...
- 响应式css样式
<div class="a"> 123 </div> @media(orientation:portrait) and (max-width:600px){ ...
- 预编译头文件stdafx.h-stdafx.cpp-stdafx.pch(pre-compile headfile)
tdafx的英文全称为:Standard Application Framework Extensions(标准应用程序框架的扩展). 所谓头文件预编译,就是把一个工程(Project)中使用的一些M ...
- 01背包---P2392 kkksc03考前临时抱佛脚
P2392 kkksc03考前临时抱佛脚 题解 01背包,类似于这道题,相似度99.999999%: 01-背包 P2663 越越的组队 一共有4科,每科的时间独立,然后每一科做一遍 P2663越 ...
- linux 测试磁盘iops 方法详解
一.FIO安装 wget http://brick.kernel.dk/snaps/fio-2.0.7.tar.gz yum -y install libaio-devel tar -zxvf ...
- apache定制错误页面
编辑配置文件,错误页面定制支持三种形式: 1. 普通文本 2. 本地跳转 3. 外部跳转 [root@ken-node2 ~]# vim /etc/httpd/conf/httpd.conf ... ...
- 自然语言处理(NLP)之个人小结
一 概述 1.1 自然语言处理四大任务 序列标注 分词 词性标注 命名实体识别 分类任务 文本分类 情感分析 判断句子关系 问答系统 对话系统 阅读理解 生成任务 机器翻译 自动文摘 图像描述生成 1 ...
- Java学习笔记-包装类
基本数据类型对象包装类的最常见作用,就是用于基本数据类型和字符串类型之间做转换 包装类的由来 为了解决8种基本数据类型的变量不能当成Object类型变量使用的问题,Java提供了包装类(Wrapper ...
- 带你手写基于 Spring 的可插拔式 RPC 框架(二)整体结构
前言 上一篇文章中我们已经知道了什么是 RPC 框架和为什么要做一个 RPC 框架了,这一章我们来从宏观上分析,怎么来实现一个 RPC 框架,这个框架都有那些模块以及这些模块的作用. 总体设计 在我们 ...