ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

DevExpress中使用ChartControl绘制折线图

2021-09-15 23:06:45  阅读:721  来源: 互联网

标签:图表 DevExpress 08 diagram Add ChartControl 2021 折线图 chartControl


一、实现效果

①手动创建线性图表(添加图表标题)

②绘制单条线性图(可实现设置X和Y轴名称、绑定数据、缩放、复选框勾选是否显示、查看指定点信息)

③绘制多条线性图可实现设置X和Y轴名称、绑定数据、缩放、复选框勾选是否显示、查看指定点信息)

二、了解认识CharControl控件

可以先手动拖拽一个ChartControl到窗体查看设计效果,了解图表

 点击图表右上角的小三角图标进行设计

三、实现步骤

3.1、编写线性图表的基础内容

        #region   图表基础

        /// <summary>
        /// 创建图表
        /// </summary>
        /// <param name="titleName">图表的标题名称</param>
        /// <param name="chartControlName">图表的名称</param>
        /// <param name="initLocation">图表的初始位置</param>
        /// <param name="InitSize">图表的初始大小</param>
        /// <returns></returns>
        private ChartControl CreateChart(string titleName,string chartControlName, 
            System.Drawing.Point initLocation, System.Drawing.Size InitSize)
        {
            ChartControl chartControl = new ChartControl();
            chartControl.Legend.Name = "Default Legend";
            chartControl.Location = initLocation;
            chartControl.Name = chartControlName;
            chartControl.Size = InitSize;
            chartControl.SeriesSerializable = new DevExpress.XtraCharts.Series[0];

            //添加标题
            if (chartControl.Titles.Count < 1)
            {
                chartControl.Titles.Add(new ChartTitle());
                chartControl.Titles[0].Text = titleName;
            }

            Controls.Add(chartControl);
            chartControl.Show();

            return chartControl;
        }

        /// <summary>
        /// 清空图表
        /// </summary>
        /// <param name="chartControl">图表</param>
        private void ClearChart(ChartControl chartControl)
        {
            if (chartControl != null)
            {
                this.Controls.Remove(chartControl);
                chartControl = null;
                chartControl?.Dispose();
            }

        }

        /// <summary>
        /// 填充数据到线性图表
        /// </summary>
        /// <param name="seriesName">图例类型名称</param>
        /// <param name="curSeriesAllDataDic">图例类型对应的所有数据</param>
        /// <param name="chartControl">线性图表</param>
        /// <param name="viewType">线性图表类型</param>
        private void FillDataToLineChart(string seriesName,
            Dictionary<string, double> curSeriesAllDataDic,
            ChartControl chartControl, ViewType viewType = ViewType.Line)
        {
            if (chartControl == null ||
                curSeriesAllDataDic == null && curSeriesAllDataDic.Count == 0) return;

            //添加一个类型的数据
            Series series = new Series(seriesName, viewType);

            foreach (var item in curSeriesAllDataDic)
            {
                series.Points.Add(new SeriesPoint(item.Key, item.Value));
            }
            chartControl.Series.Add(series);
            //图例的样式设置
            ((LineSeriesView)series.View).MarkerVisibility = DevExpress.Utils.DefaultBoolean.True;
            ((LineSeriesView)series.View).LineMarkerOptions.Kind = MarkerKind.Circle;
            ((LineSeriesView)series.View).LineStyle.DashStyle = DashStyle.Solid;
        }

        /// <summary>
        /// 图表设置
        /// </summary>
        /// <param name="chartControl">chartControl图表</param>
        /// <param name="axisXName">X轴名称</param>
        /// <param name="axisYName">Y轴名称</param>
        private void ChartSettings(ChartControl chartControl, string axisXName, string axisYName)
        {
            //显示图例复选框
            chartControl.Legend.MarkerMode = DevExpress.XtraCharts.LegendMarkerMode.CheckBoxAndMarker;

            XYDiagram diagram = (XYDiagram)chartControl.Diagram;

            if (diagram!=null)
            {
                //允许缩放X轴
                diagram.EnableAxisXZooming = true;
                diagram.AxisX.Title.Visibility = DevExpress.Utils.DefaultBoolean.True;
                diagram.AxisX.Title.Alignment = StringAlignment.Far;
                diagram.AxisX.Title.Text = axisXName;
                //要开启滚动条需设置自动范围为false
                diagram.AxisX.VisualRange.Auto = false;
                //启用X轴滚动条
                diagram.EnableAxisXScrolling = true;
                在不拉动滚动条的时候,X轴显示的数据个数(固定X轴的长度)
                //diagram.AxisX.WholeRange.SetMinMaxValues("2021/08/01", "2021/08/07");

                // Define the whole range for the Y-axis. 
                diagram.AxisY.WholeRange.Auto = false;
                diagram.AxisY.WholeRange.SetMinMaxValues(10, 70);


                //允许缩放Y轴
                diagram.EnableAxisYZooming = true;
                diagram.AxisY.Title.Visibility = DevExpress.Utils.DefaultBoolean.True;
                diagram.AxisY.Title.Alignment = StringAlignment.Far;
                diagram.AxisY.Title.Text = axisYName;

                //chartControl.CrosshairOptions.ShowArgumentLabels = true;
                //chartControl.CrosshairOptions.ShowValueLine = true;
            }
        }

        //初始化图表
        private void InitChartSettings(ChartControl chartControl, string axisXName, string axisYName)
        {
            XYDiagram diagram = (XYDiagram)chartControl.Diagram;

            if (diagram != null)
            {
                //允许缩放X轴
                diagram.EnableAxisXZooming = true;
                diagram.AxisX.Title.Visibility = DevExpress.Utils.DefaultBoolean.True;
                diagram.AxisX.Title.Alignment = StringAlignment.Far;
                diagram.AxisX.Title.Text = axisXName;
                //要开启滚动条需设置自动范围为false
                diagram.AxisX.VisualRange.Auto = false;
                //启用X轴滚动条
                diagram.EnableAxisXScrolling = true;
 
                //在不拉动滚动条的时候,X轴显示的数据个数(固定X轴的长度)
                diagram.AxisX.WholeRange.SetMinMaxValues(Convert.ToDateTime("2021/08/01"), Convert.ToDateTime("2021/08/07"));

                // Define the whole range for the Y-axis. 
                diagram.AxisY.WholeRange.Auto = false;
                diagram.AxisY.WholeRange.SetMinMaxValues(10, 70);


                //允许缩放Y轴
                diagram.EnableAxisYZooming = true;
                diagram.AxisY.Title.Visibility = DevExpress.Utils.DefaultBoolean.True;
                diagram.AxisY.Title.Alignment = StringAlignment.Far;
                diagram.AxisY.Title.Text = axisYName;

                //chartControl.CrosshairOptions.ShowArgumentLabels = true;
                //chartControl.CrosshairOptions.ShowValueLine = true;
            }
        }


        #endregion

3.2、线性图表【单线】创建

        //创建线性图表【单线】
        private void simpleButton1_Click(object sender, EventArgs e)
        {
            //0-清空图表
            ClearChart(chartControl1);
            //1-创建图表
            chartControl1=CreateChart("线性图表","LineChart",new Point(10,12),new Size(600,360));

            /*2-填充数据到图表*/
            //模拟数据
            Dictionary<string,Dictionary<string, double>> needFillDataDic = 
                new Dictionary<string, Dictionary<string, double>>();

            Dictionary<string, double> tmpADic = new Dictionary<string, double>();
            tmpADic.Add("2021/08/01", 36.5);
            tmpADic.Add("2021/08/02", 22.3);
            tmpADic.Add("2021/08/03", 21.1);
            tmpADic.Add("2021/08/04", 25.8);
            tmpADic.Add("2021/08/05", 32.3);
            tmpADic.Add("2021/08/06", 42.0);
            tmpADic.Add("2021/08/07", 35.5);
          
            needFillDataDic.Add("类型A", tmpADic);
           
           
            //填充数据
            if (needFillDataDic!=null && needFillDataDic.Count>0)
            {
                foreach (var item in needFillDataDic)
                {
                    string seriesName = item.Key;
                    Dictionary<string, double> curSeriesDataDic = item.Value;

                    FillDataToLineChart(seriesName, curSeriesDataDic, chartControl1);


                }
            }
            

            //3-图表设置
            ChartSettings(chartControl1, "日期", "数值(单位:个)");
        }

3.3、线性图表【多线】创建

        //创建线性图表【多线】
        private void simpleButton2_Click(object sender, EventArgs e)
        {
            //0-清空图表
            ClearChart(chartControl1);
            //1-创建图表
            chartControl1 = CreateChart("线性图表", "LineChart", new Point(10, 12), new Size(600, 360));

            /*2-填充数据到图表*/
            //模拟数据
            Dictionary<string, Dictionary<string, double>> needFillDataDic =
                new Dictionary<string, Dictionary<string, double>>();

            Dictionary<string, double> tmpADic = new Dictionary<string, double>();
            tmpADic.Add("2021/08/01", 36.5);
            tmpADic.Add("2021/08/02", 22.3);
            tmpADic.Add("2021/08/03", 21.1);
            tmpADic.Add("2021/08/04", 25.8);
            tmpADic.Add("2021/08/05", 32.3);
            tmpADic.Add("2021/08/06", 42.0);
            tmpADic.Add("2021/08/07", 35.5);
            needFillDataDic.Add("类型A", tmpADic);

            Dictionary<string, double> tmpBDic = new Dictionary<string, double>();
            tmpBDic.Add("2021/08/01", 66.5);
            tmpBDic.Add("2021/08/02", 51.2);
            tmpBDic.Add("2021/08/03", 44.6);
            tmpBDic.Add("2021/08/04", 35.8);
            tmpBDic.Add("2021/08/05", 42.3);
            tmpBDic.Add("2021/08/06", 32.0);
            tmpBDic.Add("2021/08/07", 55.5);
            needFillDataDic.Add("类型B", tmpBDic);


            //填充数据
            if (needFillDataDic != null && needFillDataDic.Count > 0)
            {
                foreach (var item in needFillDataDic)
                {
                    string seriesName = item.Key;
                    Dictionary<string, double> curSeriesDataDic = item.Value;

                    FillDataToLineChart(seriesName, curSeriesDataDic, chartControl1);

                }
            }


            //3-图表设置
            ChartSettings(chartControl1, "日期", "数值(单位:个)");
        }

四、官网参考资料

官网线性图表示例

官网手册

官网ChartControl

AxisBase.Range Property | Cross-Platform Class Library | DevExpress Documentation

五、其他参考资料

DevExpress 折线图和柱状图的绘制与数据绑定

DEV控件之ChartControl 属性设置

Dev中ChartControl添加限定线

Dev中ChartControl——属性熟悉与简单应用

标签:图表,DevExpress,08,diagram,Add,ChartControl,2021,折线图,chartControl
来源: https://blog.csdn.net/xiaochenXIHUA/article/details/120307234

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有