如何使用C#实现运行状态堆叠柱状图
发表于:2024-12-05 作者:千家信息网编辑
千家信息网最后更新 2024年12月05日,小编给大家分享一下如何使用C#实现运行状态堆叠柱状图,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下需求通过柱状
千家信息网最后更新 2024年12月05日如何使用C#实现运行状态堆叠柱状图
小编给大家分享一下如何使用C#实现运行状态堆叠柱状图,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
具体内容如下
需求通过柱状图显示设备运行时间停止时间,稼动率等
通过数据库查询记录,按小时显示显示目标数据。
界面设计
添加用户控件(窗体)
代码如下
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Windows.Forms;using System.Windows.Forms.DataVisualization.Charting;namespace TestRunChart{ public partial class SysTimeBarChart : UserControl { public ListListAllTime=new List (); public SysTimeBarChart() { InitializeComponent(); this.chart1.Series.Clear(); } public DateTime timeStart { get{ DateTime Time1 = this.dateTimePickerLast.Value; DateTime Time2 = this.dateTimePickerStart.Value; return Time1 >= Time2? Time2 : Time1; } } public DateTime timeEnd { get { DateTime Time1 = this.dateTimePickerLast.Value; DateTime Time2 = this.dateTimePickerStart.Value; return Time1 > Time2 ? Time1 : Time2; } } public int Hours { get { TimeSpan ts1 = new TimeSpan(timeStart.Ticks); TimeSpan ts2 = new TimeSpan(timeEnd.Ticks); TimeSpan ts = ts1.Subtract(ts2).Duration(); return ts.Hours; } } public int Days { get { TimeSpan ts1 = new TimeSpan(timeStart.Ticks); TimeSpan ts2 = new TimeSpan(timeEnd.Ticks); TimeSpan ts = ts1.Subtract(ts2).Duration(); return ts.Days; } } private void btn_GetChart_Click(object sender, EventArgs e) { // 判断时间设置 if (Hours == 0) MessageBox.Show("时间设置间隔小于1小时,请重新设置时间", "警告", MessageBoxButtons.OK); else if(Days != 0) MessageBox.Show("时间间隔大于24小时,请重新设置时间", "警告", MessageBoxButtons.OK); else Plot(); } private void btn_clear_Click(object sender, EventArgs e) { this.chart1.Series.Clear(); this.chart1.Legends.Clear(); this.chart1.ChartAreas.Clear(); ListAllTime.Clear(); } /// /// 图表绘制 /// private void Plot() { this.chart1.Series.Clear(); // 清空图表 this.chart1.Legends.Clear(); this.chart1.ChartAreas.Clear(); if (ListAllTime == null || ListAllTime.Count == 0) { MessageBox.Show("数据为空"); return; } // 辅助设置 AxiesSet(); LegendSet(); // 表格绘制 if (this.rbt_runTime.Checked) ChartPlot(TimeType.RunTime); else if (this.rbt_StopTime.Checked) ChartPlot(TimeType.StopTime); else if (this.rbt_almtime.Checked) ChartPlot(TimeType.AlmTime); else if (this.rbt_runrate.Checked) ChartPlot(TimeType.RunRate); else { ChartPlot(TimeType.RunTime); ChartPlot(TimeType.StopTime); ChartPlot(TimeType.AlmTime); ChartPlot(TimeType.RunRate); } } enum TimeType { RunTime, AlmTime, StopTime, RunRate } ////// 数据绘制 /// /// 数据名字 /// 数据 /// chart类型 /// 是否为主轴数据 private void ChartPlot(TimeType type) { string seriesName = ""; SeriesChartType chartType = SeriesChartType.StackedColumn; bool isPrimary = true; switch (type) { case TimeType.RunTime: seriesName = "运行时间"; break; case TimeType.StopTime: seriesName = "待机时间"; break; case TimeType.AlmTime: seriesName = "报警时间"; break; case TimeType.RunRate: seriesName = "稼动率"; chartType = SeriesChartType.Line; isPrimary = false;//非主轴,右边轴 break; default: break; } Series series = this.chart1.Series.Add(seriesName); series.ChartType = chartType; // 图表类型 series.YAxisType = isPrimary ? AxisType.Primary : AxisType.Secondary; series.BorderWidth = 2; series.Label = isPrimary ? "#VAL" : "#VAL{P}"; int i = 0; foreach (var m in ListAllTime) { double mvalue = 0; switch (type) { case TimeType.RunTime: mvalue = m.RunTime; break; case TimeType.StopTime: mvalue = m.StopTime; break; case TimeType.AlmTime: mvalue = m.AlmTime; break; case TimeType.RunRate: mvalue = m.RunRate; break; default: break; } series.Points.AddXY(i, mvalue); i++; } } ////// 坐标轴设置 /// private void AxiesSet() { ChartArea chartAreas = this.chart1.ChartAreas.Add("ChartAreas"); chartAreas.AxisX.MajorGrid.Enabled = false; // 坐标轴 chartAreas.AxisY.MajorGrid.Enabled = false; // Y轴主轴 chartAreas.AxisY.Maximum = 60; chartAreas.AxisY2.MajorGrid.Enabled = false; // Y轴次轴 chartAreas.AxisY2.Enabled = AxisEnabled.True; chartAreas.AxisY2.LabelStyle.Format = "0%"; chartAreas.AxisY2.Maximum = 1; } ////// 标签设置 /// private void LegendSet() { Legend legend = this.chart1.Legends.Add("Legend"); legend.Alignment = StringAlignment.Center; // 标签居中 legend.Docking = Docking.Top; // 上方 } ////// 初始化数据列,默认全部停止时间 /// /// ///public bool InitDataList(bool brandom=false) { if (Days != 0) { MessageBox.Show("时间设置异常"); return false; } var startTime = timeStart; ListAllTime.Clear(); Random rd = new Random(); for (int i = 0; i <= Hours; i++) { var num = rd.Next(0, 59); SysTimeCnt mCnt = new SysTimeCnt() { _InSertTime = string.Format("{0:yyyy-MM-dd-HH-mm}", startTime), RunTime = brandom? num:0, AlmTime = brandom ? rd.Next(0, 60 - num):0 }; ListAllTime.Add(mCnt); startTime.AddHours(1); } return true; } } public class SysTimeCnt { public string _InSertTime; public string InSertTime => _InSertTime; public void UpdateInSertTime() { _InSertTime = string.Format("{0:yyyy-MM-dd-HH-mm}", DateTime.Now); } public double RunTime; public double AlmTime; public double StopTime { get { return 60 - RunTime - AlmTime; } } public double RunRate { get { return Math.Round(Convert.ToDouble(this.RunTime / 60), 2); } } }}
主窗体代码
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btn_AddData_Click(object sender, EventArgs e) { var bSucessd = sysTimeBarChart1.InitDataList(true); if (bSucessd) MessageBox.Show("完成"); } }
显示效果
以上是"如何使用C#实现运行状态堆叠柱状图"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
时间
数据
运行
柱状
内容
图表
小时
篇文章
状态
C#
主轴
代码
坐标
坐标轴
标签
窗体
类型
不怎么
右边
名字
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
广思网络技术有限公司
用友t6数据库表
二维进化网络技术有限公司待遇
沈苏彬南邮答案网络安全
在希望之村中怎么选择服务器
同花顺与服务器断开链接
中国移动网络技术岗位工作好不好
网络安全框架CFS
打印服务器上添加注册表项
南湖租房软件开发
开办网络安全公司
关于网络安全意识调查报告
nas web服务器
上海序睿网络技术有限公司
宣传网络安全班会内容
汇川服务器报警610
常州软件开发哪家好
网络安全礼仪文字
7-12岁儿童网络安全手抄报
魔兽世界服务器社区在哪里
测绘数据库管理流程图
关系数据库关系代数
新的网络安全法 信息
ios云搜软件开发
stdlib数据库怎么用
分布式数据库学习体会
date型数据写入数据库
元年多维数据库
共青团网络安全宣传周总结
重庆市大学生网络安全研究中心