一、实现效果

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

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

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

④导出图表为Excel

二、了解认识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;//要开启滚动条需设置自动范围为falsediagram.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;//要开启滚动条需设置自动范围为falsediagram.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, "日期", "数值(单位:个)");}

3.4、导出图表为Excel

        #region   导出图表/// <summary>/// 导出图表为Excel文件/// </summary>/// <param name="chartControl">chartControl组件</param>public static void ExportDatasToExcelFile(ChartControl chartControl){if (chartControl==null){MessageBox.Show("图表为空!导出失败", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);return;}SaveFileDialog saveFileDialog = new SaveFileDialog();saveFileDialog.Title = "导出Excel";saveFileDialog.Filter = "Excel文件(*.xls)|*.xls|Excel文件(*.xlsx)|*.xlsx";if (saveFileDialog.ShowDialog() == DialogResult.OK){string filter = saveFileDialog.FileName.Substring(saveFileDialog.FileName.LastIndexOf(".") + 1);if (filter == "xls"){XlsExportOptions options = new XlsExportOptions();options.TextExportMode = TextExportMode.Value;options.ExportMode = XlsExportMode.SingleFile;chartControl.ExportToXls(saveFileDialog.FileName, options);}else{XlsxExportOptions options = new XlsxExportOptions();options.TextExportMode = TextExportMode.Value;options.ExportMode = XlsxExportMode.SingleFile;chartControl.ExportToXlsx(saveFileDialog.FileName, options);}MessageBox.Show("导出成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);if (MessageBox.Show("保存成功,是否打开文件?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes){System.Diagnostics.Process.Start(saveFileDialog.FileName);}}}#endregion 

四、官网参考资料

①官网线性图表示例

②官网手册

③官网ChartControl

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

五、其他参考资料

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

②DEV控件之ChartControl 属性设置

③Dev中ChartControl添加限定线

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

DevExpress中使用ChartControl绘制折线图和导出图表为Excel文件相关推荐

  1. pyecharts绘制折线图

    要使用Python中的pyecharts绘制折线图,首先需要安装pyecharts库(可以使用pip install pyecharts命令进行安装).然后可以按照以下步骤进行绘图: 导入pyecha ...

  2. 「解析」Matplotlib 绘制折线图

    相比于[优雅]matplotlib 常见图.[优雅]matplotlib 3D图 而言,折线图使用的频率会更高一些,在此整理下最近使用 Matplotlib 绘制折线图常用的一些配置,小伙伴们只需要修 ...

  3. 使用matplotlib绘制折线图(绘制一天当中的气温变化)

    matplotlib绘制折线图 一.使用matplotlib绘制一天当中的气温变化 1.假设一天当中每隔两个小时(range(2,26,2))的气温分别是[15,13,14.5,17,20,25,26 ...

  4. python matplotlib 绘制二维数据中某些列到折线图,没有线的解决方法

    results.txt中的文本数据是这样的. { "epoch":0, "imgindex":0, "imgcount":63, " ...

  5. 使用python读取excel中的数据,并绘制折线图

    使用python读取excel中的数据,并绘制折线图 做实验的时候采集到一些数据,从文本拷贝到excel,然后从十六进制转换成十进制.图表是分析数据的有利工具,使用python绘制出的图表简明美观.所 ...

  6. java利用POI在word中绘制折线图

    1.poi的简介 Apache POI 简介是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office(Excel.WORD ...

  7. Python读取excel文件中的数据,绘制折线图、散点图

    https://www.cnblogs.com/liulinghua90/p/9935642.html https://blog.csdn.net/qq_32458499/article/detail ...

  8. python matplotlib绘制折线图

    前言 众所周知,matplotlib 是一款功能强大开源的数据可视化模块,凭借着强大的扩展性构建出更高级别的绘图工具接口如seaborn.ggplot.我们来看看往期学习章节内容概述吧~ 接下来,我们 ...

  9. Tableau 绘制折线图

    手把手教你 Tableau 绘制折线图 折线图是将整个视图中的各个数据点连接起来,通常用于显示数据随着时间变化的趋势,或者预测未来的值. 绘制电影数量变化折线图 数据展示 操作步骤 1.对「上映时间」 ...

  10. python matplotlib画折线图_python使用matplotlib绘制折线图教程

    matplotlib简介 matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序 ...

最新文章

  1. css浮动+应用(瀑布流效果的实现)
  2. POJ - 1273 Drainage Ditches(最大流)
  3. [译]第三章:什么是组织结构
  4. 【可持久化线段树】【主席树】[HDU4417]Super Mario
  5. 028-Dell服务器做Raid
  6. how to clear screen in python shell
  7. Android Studio中.9.png文件出错问题
  8. 常见的虚拟化软件及其特点。
  9. 机器人模型仿真(turtlebot3)
  10. TP6-------对接腾讯云直播
  11. 通过命令行玩转Git,需要记住那些命令?
  12. 关于this.$XXXXXXX
  13. 多类别分类——吴恩达课程作业python代码实现
  14. 介绍计算机说明文,介绍电脑的说明文作文300字
  15. Max-Product Loopy Belief Propagation for Solving MRF's energy function minimization
  16. CCM5.0 应用实例(SIP X-lite)
  17. 中暑了,别只知道喝藿香正气水、擦清凉油!这个防暑妙招你得懂
  18. cpu软改vista 驱动_Windows Vista,连接点并将“我的文档”移动到另一个驱动器。...
  19. 噪音声压和声功率的区别_声学基础知识(三):声压、声功率和声强的联系与区别-下...
  20. 现在的美女都不喜欢程序员

热门文章

  1. 计算机等级考试一级宝典,计算机等级考试一级通关宝典.doc
  2. 听音扒谱app_识字APP评测!洪恩、熊猫博士、麦田、悟空、叫叫哪个好?
  3. 解决mysql connection ODBC安装系统代码126错误 VC2013安装
  4. 开发Connext DDS传输插件不用求人,看这一篇就够了
  5. 计算机打印不了测试纸,XP打印机打印不了测试页如何解决|打印机打印不了测试页的原因...
  6. RF(接口自动化测试)
  7. topjui中datagrid增删改查
  8. 集装箱装柜计算机器在线,装箱大师在线计算教程
  9. 搭建MySQL可视化Web界面服务器
  10. 雷蛇灵刃 15 黑苹果 Hackintosh