分享

Mschart应用之曲线图表spline

 行走在理想边缘 2018-11-25

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Data;

using System.Windows.Forms.DataVisualization.Charting;

using System.Drawing;

using System.Windows.Forms;

 

 

namespace KryptonFormAirCompressor.BLL

{

    class StartRun

    {

        static DateTime startTime = DateTime.Now.AddSeconds(-1);

        DateTime endTime = startTime.AddSeconds(6);

        DateTime kd = DateTime.Parse("00:00:01");

        Random rd = new Random();       //随机函数,产生Y轴数据

        DataTable dt = new DataTable(); //创建数据表,存储数据

        int flag = 0;   //设置Timer控件是否生效

        int i = 0;      //显示数据表中的数据行数

        double yMax = 400;

        double yMin = -400;

        double yStep = 200;

        Chart mychart = new Chart();

 

        //图表初始化

        public void chartInit(Chart ch, TabPage tp)

        {

            TabPage tabPage2 = tp;

            Chart chInit = ch;

            ch.Series["Series1"].Points.Clear();

            chInit.Width = tabPage2.Width / 2 - 1;

            chInit.Height = tabPage2.Height / 3 - 25;

            chInit.BackColor = Color.Azure;

 

            //设置是否在内部绘图区域中自动设置合适的图表元素

            chInit.ChartAreas["ChartArea1"].Position.Auto = false;

            chInit.ChartAreas["ChartArea1"].Position.X = 0;

            chInit.ChartAreas["ChartArea1"].Position.Y = 0;

            chInit.ChartAreas["ChartArea1"].Position.Width = 100;

            chInit.ChartAreas["ChartArea1"].Position.Height = 100;

            chInit.ChartAreas["ChartArea1"].InnerPlotPosition.Auto = false;

            chInit.ChartAreas["ChartArea1"].InnerPlotPosition.X = 7;

            chInit.ChartAreas["ChartArea1"].InnerPlotPosition.Y = 4;

            chInit.ChartAreas["ChartArea1"].InnerPlotPosition.Width = 88;

            chInit.ChartAreas["ChartArea1"].InnerPlotPosition.Height = 85;

 

            ////设置X轴字体类型、大小、颜色

            //chInit.ChartAreas["ChartArea1"].AxisX.LabelStyle.Font = new System.Drawing.Font("宋体", 10f);

            //chInit.ChartAreas["ChartArea1"].AxisX.LabelStyle.ForeColor = Color.Black;

 

            ////设置Y轴字体类型、大小、颜色

            //chInit.ChartAreas["ChartArea1"].AxisY.LabelStyle.Font = new System.Drawing.Font("宋体", 10f);

            //chInit.ChartAreas["ChartArea1"].AxisY.LabelStyle.ForeColor = Color.Black;

        }

 

        public double chart(Chart ch, int category, DataTable table, double min, double max, double now)

        {

            mychart = ch;

            dt = table;

 

 

 

            yMin = min;

            yMax = max;

            yStep = (yMax - yMin) / 4;

            DataRow dr = dt.NewRow();

            dr["XTime"] = DateTime.Now.ToString("HH:mm:ss");

            switch (category)

            {

                case 0:

                    dr["YTemp"] = rd.Next(-360, 360);

                    break;

                case 1:

                    dr["YTemp"] = rd.Next(-10, 50);

                    break;

                case 2:

                    dr["YTemp"] = rd.Next(-80, 80);

                    break;

                case 3:

                    dr["YTemp"] = rd.Next(-360, 360);

                    break;

                case 4:

                    dr["YTemp"] = rd.Next(-360, 360);

                    break;

                case 5:

                    dr["YTemp"] = rd.Next(-360, 360);

                    break;

                case 6:

                    dr["YTemp"] = rd.Next(-360, 360);

                    break;

                case 7:

                    dr["YTemp"] = rd.Next(-10, 50);

                    break;

                case 8:

                    dr["YTemp"] = rd.Next(-80, 80);

                    break;

                case 9:

                    dr["YTemp"] = rd.Next(-360, 360);

                    break;

                case 10:

                    dr["YTemp"] = rd.Next(-360, 360);

                    break;

                case 11:

                    dr["YTemp"] = rd.Next(-360, 360);

                    break;

                case 12:

                    dr["YTemp"] = rd.Next(-360, 360);

                    break;

                case 13:

                    dr["YTemp"] = rd.Next(-800, 1000);

                    break;

                case 14:

                    dr["YTemp"] = rd.Next(-50, 10);

                    break;

                case 15:

                    dr["YTemp"] = rd.Next(-60, 20);

                    break;

                case 16:

                    dr["YTemp"] = rd.Next(-360, 360);

                    break;

                case 17:

                    dr["YTemp"] = rd.Next(-10, 80);

                    break;

                default:

                    dr["YTemp"] = rd.Next(-360, 360);

                    break;

 

                //"大气压力",

                //"环境温度",

                //"环境温度",

                //"吸气温度",

                //"进气压力",

                //"一级吸气温度",

                //"一级排气压力",

                //"一级排气温度",

                //"中冷压差",

                //"二级吸气温度",

                //"二级排气压力",

                //"二级排气温度",

                //"喷嘴压差",

                //"喷嘴温度",

                //"转速",

                //"扭矩",

                //"电压",

                //"电流",

            }

            dt.Rows.Add(dr);

 

 

            #region 折线图

            mychart.DataSource = dt;//绑定数据

            mychart.Series["Series1"].ChartType = SeriesChartType.Spline;//设置图表类型

            mychart.Series["Series1"].IsValueShownAsLabel = false;//显示数据点的值

            mychart.Series["Series1"].BorderColor = Color.Green;

            //mychart.Series["Series1"].LegendText = "动态温度点";

            //mychart.Series["Series1"].Legend.Remove(1);

            mychart.Series["Series1"].IsVisibleInLegend = false;

            mychart.Series["Series1"].MarkerStyle = MarkerStyle.Circle; //线条上的数据点标志类型

            mychart.Series["Series1"].MarkerBorderWidth = 0;

            mychart.Series["Series1"].MarkerColor = Color.Red;

 

            //////设置是否在内部绘图区域中自动设置合适的图表元素

            //mychart.ChartAreas["ChartArea1"].Position.Auto = false;

            //mychart.ChartAreas["ChartArea1"].Position.X = 0;

            //mychart.ChartAreas["ChartArea1"].Position.Y = 1;

            //mychart.ChartAreas["ChartArea1"].Position.Width = 100;

            //mychart.ChartAreas["ChartArea1"].Position.Height = 100;

            //mychart.ChartAreas["ChartArea1"].InnerPlotPosition.Auto = false;

            //mychart.ChartAreas["ChartArea1"].InnerPlotPosition.X = 5;

            //mychart.ChartAreas["ChartArea1"].InnerPlotPosition.Y = 3;

            //mychart.ChartAreas["ChartArea1"].InnerPlotPosition.Width = 90;

            //mychart.ChartAreas["ChartArea1"].InnerPlotPosition.Height = 85;

 

            i = dt.Rows.Count - 1;

            now = Convert.ToDouble(dt.Rows[i]["YTemp"].ToString());

            mychart.Series[0].Points.AddXY(Convert.ToDateTime(dt.Rows[i]["XTime"].ToString()).ToOADate(), Convert.ToDouble(dt.Rows[i]["YTemp"].ToString()));

 

            //X轴设置

            //mychart.ChartAreas["ChartArea1"].AxisX.Title = "时间";//X轴标题

            mychart.ChartAreas["ChartArea1"].AxisX.TitleAlignment = StringAlignment.Near;//设置X轴标题的名称所在位置位近

            mychart.ChartAreas["ChartArea1"].AxisX.MajorTickMark.Enabled = true//坐标轴上的刻度线

            mychart.ChartAreas["ChartArea1"].AxisX.MajorGrid.Enabled = true;//不显示竖着的分割线

            mychart.ChartAreas["ChartArea1"].AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dash;//主网格为虚线

            mychart.ChartAreas["ChartArea1"].AxisX.LineColor = Color.Blue; //X轴颜色

            mychart.ChartAreas["ChartArea1"].AxisX.IsMarksNextToAxis = true;

            //mychart.ChartAreas["ChartArea1"].AxisX.LabelStyle.IsEndLabelVisible = false;//最后一个标签点显示

 

            //图像上方的X2轴设置

            mychart.ChartAreas["ChartArea1"].AxisX2.Enabled = AxisEnabled.True;

            mychart.ChartAreas["ChartArea1"].AxisX2.MajorGrid.Enabled = false;

            mychart.ChartAreas["ChartArea1"].AxisX2.MajorTickMark.Enabled = false;

            mychart.ChartAreas["ChartArea1"].AxisX2.LineColor = Color.Blue;

            mychart.ChartAreas["ChartArea1"].AxisX2.LabelStyle.Enabled = false;

 

            //设置X轴字体类型、大小、颜色

            mychart.ChartAreas["ChartArea1"].AxisX.LabelStyle.Font = new System.Drawing.Font("宋体", 10f);

            mychart.ChartAreas["ChartArea1"].AxisX.LabelStyle.ForeColor = Color.Black;

 

            //设置Y轴字体类型、大小、颜色

            mychart.ChartAreas["ChartArea1"].AxisY.LabelStyle.Font = new System.Drawing.Font("宋体", 10f);

            mychart.ChartAreas["ChartArea1"].AxisY.LabelStyle.ForeColor = Color.Black;

 

            /************************************************************************/

            /* 本文重点讲解时间格式的设置

             * 但第一个点并不能保证在原点第一个时间坐标位置,与时间间隔跨度有关系

             * 需要设置最小时间,最大小时,时间间隔类型,时间间隔值等四个参数,以保证当前网络跨度内容显示6个主网络线*/

            /************************************************************************/

            mychart.Series["Series1"].XValueType = ChartValueType.DateTime;     //X轴标签为时间类型

            mychart.ChartAreas["ChartArea1"].AxisX.LabelStyle.Format = "HH:mm:ss";  //X轴上显示时、分、秒

 

            if (DateTime.Now.ToOADate() > endTime.ToOADate())

            {

                endTime = endTime.AddSeconds(6);//延长X时间轴

 

                //设置时间单位的最小、最大值

                mychart.ChartAreas["ChartArea1"].AxisX.Minimum = startTime.ToOADate();

                mychart.ChartAreas["ChartArea1"].AxisX.Maximum = endTime.ToOADate();

 

                //跨度为秒,间隔是通过最大时间与最小时间差相减除6所得,所以有6个间隔线

                mychart.ChartAreas["ChartArea1"].AxisX.IntervalType = DateTimeIntervalType.Seconds;

                TimeSpan jianGe = endTime - startTime;

                mychart.ChartAreas["ChartArea1"].AxisX.Interval = (jianGe.TotalSeconds) / 6;

            }

 

 

            //Y轴设置

            //mychart.ChartAreas["ChartArea1"].AxisY.Title = "气温";//Y轴标题

            mychart.ChartAreas["ChartArea1"].AxisY.TitleAlignment = StringAlignment.Far;//设置Y轴标题的名称所在位置位远

            mychart.ChartAreas["ChartArea1"].AxisY.Interval = yStep;

            mychart.ChartAreas["ChartArea1"].AxisY.Maximum = yMax;

            mychart.ChartAreas["ChartArea1"].AxisY.Minimum = yMin;

            mychart.ChartAreas["ChartArea1"].AxisY.IsStartedFromZero = true;

 

            mychart.ChartAreas["ChartArea1"].AxisY.MajorTickMark.Enabled = false;//坐标轴上的刻度线,为false时少了小横杆线

            mychart.ChartAreas["ChartArea1"].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash;

            mychart.ChartAreas["ChartArea1"].AxisY.LineColor = Color.Blue;

 

            //图像上方的X2轴设置

            mychart.ChartAreas["ChartArea1"].AxisY2.Enabled = AxisEnabled.True;

            mychart.ChartAreas["ChartArea1"].AxisY2.MajorGrid.Enabled = false;

            mychart.ChartAreas["ChartArea1"].AxisY2.MajorTickMark.Enabled = false;

            mychart.ChartAreas["ChartArea1"].AxisY2.LineColor = Color.Blue;

            mychart.ChartAreas["ChartArea1"].AxisY2.LabelStyle.Enabled = false;

 

            #endregion

 

            return now;

        }

    }

}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多