iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#实现运行状态堆叠柱状图
  • 982
分享到

C#实现运行状态堆叠柱状图

2024-04-02 19:04:59 982人浏览 八月长安
摘要

本文实例为大家分享了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 List<SysTimeCnt> ListAllTime=new List<SysTimeCnt>();
        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();
        }
        /// <summary>
        ///  图表绘制
        /// </summary>
        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
        }
        /// <summary>
        ///  数据绘制
        /// </summary>
        /// <param name="seriesName">数据名字</param>
        /// <param name="data">数据</param>
        /// <param name="chartType">chart类型</param>
        /// <param name="isPrimary">是否为主轴数据</param>
        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++;
            }
        }

        /// <summary>
        /// 坐标轴设置
        /// </summary>
        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;
        }

        /// <summary>
        ///  标签设置
        /// </summary>
        private void LegendSet()
        {
            Legend legend = this.chart1.Legends.Add("Legend");
            legend.Alignment = StringAlignment.Center;              // 标签居中
            legend.Docking = Docking.Top;                           //     上方
        }
        /// <summary>
        /// 初始化数据列,默认全部停止时间
        /// </summary>
        /// <param name="brandom"></param>
        /// <returns></returns>
        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("完成");
        }
    }

显示效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C#实现运行状态堆叠柱状图

本文链接: https://www.lsjlt.com/news/138950.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#实现运行状态堆叠柱状图
    本文实例为大家分享了C#实现运行状态堆叠柱状图的具体代码,供大家参考,具体内容如下 需求通过柱状图显示设备运行时间停止时间,稼动率等通过数据库查询记录,按小时显示显示目标数据。 界面...
    99+
    2024-04-02
  • 如何使用C#实现运行状态堆叠柱状图
    小编给大家分享一下如何使用C#实现运行状态堆叠柱状图,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下需求通过柱状图显示设备运行时间停止时间,稼动率等通过...
    99+
    2023-06-29
  • vue+echarts实现堆叠柱状图
    本文实例为大家分享了vue+echarts实现堆叠柱状图的具体代码,供大家参考,具体内容如下 echarts-子组件 <template> <div cla...
    99+
    2024-04-02
  • echarts柱状堆叠图怎么实现
    本文小编为大家详细介绍“echarts柱状堆叠图怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“echarts柱状堆叠图怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。问题描述: &nbs...
    99+
    2023-07-05
  • Python绘制柱状图堆叠图
    本文详细介绍如何使用 Matplotlib 绘制柱状堆叠图 文章目录 一、引入库二、数据准备三、绘制基本柱状堆叠图1.绘制基本图形2.设置柱子宽度、添加刻度标签和旋转角度 四、完整代码五...
    99+
    2023-09-13
    python matplotlib 开发语言
  • Matlab实现极坐标堆叠柱状图的绘制
    目录part1: 函数介绍基本使用角度范围常用函数:改变样式常用函数:设置下界常用函数:修改颜色添加图例part2: 完整类函数代码part3: 两个使用示例示例一示例二极坐标堆叠图...
    99+
    2022-11-13
    Matlab堆叠柱状图 Matlab 柱状图
  • echarts柱状堆叠图实现示例(图例和x轴都是动态的)
    目录问题描述:  实现思路及步骤:示例:代码:总结问题描述:   echarts柱状堆叠图,是很常用的图表,官网的例子很简单 。图例(lege...
    99+
    2023-05-14
    echarts柱状堆叠图 echarts柱状图叠加 echarts堆积柱状图
  • 怎么利用JavaScript绘制堆叠柱状图
    这篇文章主要讲解了“怎么利用JavaScript绘制堆叠柱状图”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么利用JavaScript绘制堆叠柱状图”吧!效果图this.state.wor...
    99+
    2023-06-29
  • Echarts横向堆叠柱状图和markLine实例详解
    目录1.Echarts 横向堆叠柱状图 + markLine效果图代码如下:2.Echarts 横向堆叠柱状图 + markLine效果图代码如下总结1.Echarts 横向堆叠柱状...
    99+
    2024-04-02
  • Vue+Antv F2实现层叠柱状图
    本文实例为大家分享了Vue+ Antv F2实现层叠柱状图的具体代码,供大家参考,具体内容如下 一、 创建canvas标签 <canvas id="caseChart" sty...
    99+
    2024-04-02
  • 详解如何利用JavaScript绘制堆叠柱状图
    效果图 this.state.workChartList的数据结构 const workChartList = [ { name: "居民热线", chartData: [5, ...
    99+
    2024-04-02
  • Echarts横向堆叠柱状图和markLine怎么使用
    这篇文章主要介绍“Echarts横向堆叠柱状图和markLine怎么使用”,在日常操作中,相信很多人在Echarts横向堆叠柱状图和markLine怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Ech...
    99+
    2023-06-30
  • Vue+ Antv F2怎么实现层叠柱状图
    这篇文章主要介绍“Vue+ Antv F2怎么实现层叠柱状图”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue+ Antv F2怎么实现层叠柱状图”文章能帮...
    99+
    2023-06-29
  • Python绘制百分比堆叠柱状图并填充图案
    通过Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案。主要原因是有些论文打印出是黑白色的,不同类别之间区分不明显,所以做了这种方案。 存在一...
    99+
    2024-04-02
  • 如何在Python中使用ECharts绘制堆叠柱状图
    在数据可视化领域,堆叠柱状图是一种常见的可视化方式。它将多个数据系列绘制成一个条形,每个条形由多个子项组成,每个子项对应一个数据系列,在同一坐标系下进行展示。这种图表可以用于比较不同类别或数据系列的总大小、每个类别或数据系列的组成比例等。在...
    99+
    2023-12-17
    Python echarts 堆叠柱状图
  • .net+FusionChart实现动态显示的柱状图和饼状图
    html代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or...
    99+
    2024-04-02
  • vue echarts实现柱状图动态展示
    本文实例为大家分享了vue echarts实现柱状图动态展示的具体代码,供大家参考,具体内容如下 轮播图形式展现 <template> <div clas...
    99+
    2024-04-02
  • Python实现动态柱状图的绘制
    目录一.基础柱状图二.基础时间线柱状图三.GDP动态柱状图绘制四.完整代码一.基础柱状图 如图 演示 from pyecharts.charts import Bar from p...
    99+
    2022-12-29
    Python绘制动态柱状图 Python动态柱状图 Python 柱状图
  • PyQt5可视化 7 饼图和柱状图实操案例 ④层叠柱状图和百分比柱状图及饼图的实现【超详解图文教程】
    目录 一、层叠柱状图 1 初始化层叠柱状图和绘制层叠柱状图函数 2 构造函数里调用  3 draw_sta来源地址:https://blog.csdn.net/qq_53317005/article/details/129135505...
    99+
    2023-09-29
    python qt 信息可视化 数据库
  • Python怎么绘制百分比堆叠柱状图并填充图案
    这篇文章主要介绍“Python怎么绘制百分比堆叠柱状图并填充图案”,在日常操作中,相信很多人在Python怎么绘制百分比堆叠柱状图并填充图案问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python怎么绘制百...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作