利用MVC Chart 打造后台图表、前端图表

  应用场景是这个样子的:要做导出数据到PDF的功能,涉及到文本、表格、图表等内容。在做图表功能时,发现之前用Highcharts做的图表根本就不能集成到PDF中。这里需要一个能在程序后台就生成图表的功能,通过两个步骤进行集成:

  1)将图表生成到一个图片文件中,存储在服务器上;

  2)根据指定的图片路径,将图片集成到PDF。

  那么集成的核心就为:如何在.net程序后台就生成一个图表。

  这里介绍的是:

    1)如何利用 Mvc Chart在程序的后台生成图表;

    2)如何利用 Mvc Chart在前端生成图表。

  必要条件:添加 using System.Web.Helpers;引用

一、在程序后台生成图表

  先看下生成的效果:

制作这样一个图表,需要经过以下几个步骤:

Step 1:创建图表对象

Chart chart = new Chart(500, 400, ChartTheme.Blue);//ChartTheme:图表主题

Step 2:添加图表标题

chart.AddTitle(“2014年城市人口统计”);

Step 3:提供图表的数据点和系列特性,它包含以下几个部分

//提供图表的数据点和系列特性
chart.AddSeries(
       name: “2014population”,//系列的唯一名称 做图例时有用     chartType: ChartType.Column.ToString(),//图表类型 柱状图、折线图、饼图...     xValue: new List<string>() { "北京", "上海", "广州", "深圳", "重庆" },//要沿 X 轴绘制的值    yValues: new List<float>() { 1962.24f, 2301.91f, 1270.08f, 1035.79f, 2884.62f }//要沿 Y 轴绘制的值 );

Step 4:设置X轴和Y轴的值

chart.SetXAxis(“城市”);
chart.SetYAxis(“人口”);

Step 5:保存图片

chart.Save(“D:\2014population.jpeg”);

  现在,打完收功。名为:2014population.jpeg的图片就已经生成在指定的路径下了。有没有觉得很简单、快速?

  可现在是一个Y轴只有一个值,当有多个值时怎么办呢?即要使之达到下面这样的效果:

  现在,我们通过在前台生成的方式来看这样的效果是如何达到的:

二:在程序前端生成图表

  在前面的第三步:Step 3:提供图表的数据点和系列特性 里,提供了生成图表的数据来源。如果要使一个Y轴对象有多个值,达到上面的效果,只需要再写一个 AddSeries(... ...),即可。除此之外,你还需要:

  将 .Save(...)修改为:.Write()

  是的,前台和后台生成图表的差别,就只有这一处。来看看在前端生成图表的完整代码:

    <div>
        @{
            Chart t2 = new Chart(width: 500, height: 300, theme: ChartTheme.Blue)
            .AddTitle("2013~2014城市人口统计")
            .AddLegend("年份")
            .SetXAxis("城市")
            .SetYAxis("人口 【单位:万人】")
            .AddSeries(
            name: "2013年",
            xValue: new[] {
                "北京",
                "上海",
                "广州",
                "深圳",
                "重庆" },
            yValues: new[] {
                1962.24f,
                2301.91f,
                1270.08f,
                1035.79f,
                2884.62f
                }
            )
            .AddSeries(
            name: "2014年",
            xValue: new[] {
                "北京",
                "上海",
                "广州",
                "深圳",
                "重庆" },
            yValues: new[] {
                234.24f,
                4234.91f,
                2342.08f,
                4234.79f,
                2342.62f
                }
            )
            .Write();
        }
    </div>

三:封装

  为方便图片的生成,对在后台生成的代码做如下的封装:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Helpers;

namespace Seal_Common
{
    /// <summary>
    /// 绘制图表,并保存在服务器中[必要引用::System.Web.Helpers]
    /// </summary>
    public class ChartHelper
    {
        private const int chartWidth = 380;
        private const int chartHeight = 300;
        /// <summary>
        /// 后台生成图片, 并保存在服务器中
        /// </summary>
        /// <param name="name">系列的唯一名称 做图例时有用</param>
        /// <param name="title">图表标题</param>
        /// <param name="names">list string 名称(坐标轴中的X轴)</param>
        /// <param name="values">list float 值(坐标轴中的Y轴)</param>
        /// <param name="saveurl">保存到服务的URL</param>
        /// <param name="charttype">图表类型 默认为柱形图 ChartType.Column</param>
        /// <param name="width">宽度 默认500</param>
        /// <param name="height">高度 默认300</param>
        /// <param name="Xtitle">X轴标题</param>
        /// <param name="Ytitle">Y轴标题</param>
        /// <param name="charttheme">图表样式</param>
        public void GenerateChart(string name, string title, List<string> names, List<float> values, string saveurl, ChartType charttype, int width = 500, int height = 300, string Xtitle = "", string Ytitle = "", string charttheme = ChartTheme.Vanilla)
        {
            try
            {
                DateTime dt = DateTime.Now;
                Chart chart = new Chart(width, height, charttheme.ToString());
                chart.AddTitle(title);
                chart.AddSeries(
                    name: name,
                    chartType: charttype.ToString(),
                    xValue: names,
                    yValues: values
                );
                chart.SetXAxis(Xtitle);
                chart.SetYAxis(Ytitle);
                chart.Save(saveurl);
            }
            catch (Exception ex)
            {

            }
        }
    }
    /// <summary>
    /// 图表类型
    /// </summary>
    public enum ChartType
    {
        /// <summary>
        /// 点图类型
        /// </summary>
        Point = 0,
        /// <summary>
        /// 快速点图类型
        /// </summary>
        FastPoint = 1,
        /// <summary>
        /// 气泡图类型
        /// </summary>
        Bubble = 2,
        /// <summary>
        /// 折线图类型
        /// </summary>
        Line = 3,
        /// <summary>
        /// 样条图类型
        /// </summary>
        Spline = 4,
        /// <summary>
        /// 阶梯线图类型
        /// </summary>
        StepLine = 5,
        /// <summary>
        /// 快速扫描线图类型
        /// </summary>
        FastLine = 6,
        /// <summary>
        /// 条形图类型
        /// </summary>
        Bar = 7,
        /// <summary>
        /// 堆积条形图类型
        /// </summary>
        StackedBar = 8,
        /// <summary>
        /// 百分比堆积条形图类型
        /// </summary>
        StackedBar100 = 9,
        /// <summary>
        /// 柱形图类型
        /// </summary>
        Column = 10,
        /// <summary>
        /// 堆积柱形图类型
        /// </summary>
        StackedColumn = 11,
        /// <summary>
        /// 百分比堆积柱形图类型
        /// </summary>
        StackedColumn100 = 12,
        /// <summary>
        /// 面积图类型
        /// </summary>
        Area = 13,
        /// <summary>
        /// 样条面积图类型
        /// </summary>
        SplineArea = 14,
        /// <summary>
        /// 堆积面积图类型
        /// </summary>
        StackedArea = 15,
        /// <summary>
        /// 百分比堆积面积图类型
        /// </summary>
        StackedArea100 = 16,
        /// <summary>
        /// 饼图类型
        /// </summary>
        Pie = 17,
        /// <summary>
        /// 圆环图类型
        /// </summary>
        Doughnut = 18,
        /// <summary>
        /// 股价图类型
        /// </summary>
        Stock = 19,
        /// <summary>
        /// 线图类型
        /// </summary>
        Candlestick = 20,
        /// <summary>
        /// 范围图类型
        /// </summary>
        Range = 21,
        /// <summary>
        /// 样条范围图类型
        /// </summary>
        SplineRange = 22,
        /// <summary>
        /// 范围条形图类型
        /// </summary>
        RangeBar = 23,
        /// <summary>
        /// 范围柱形图类型
        /// </summary>
        RangeColumn = 24,
        /// <summary>
        /// 雷达图类型
        /// </summary>
        Radar = 25,
        /// <summary>
        /// 极坐标图类型
        /// </summary>
        Polar = 26,
        /// <summary>
        /// 误差条形图类型
        /// </summary>
        ErrorBar = 27,
        /// <summary>
        /// 盒须图类型
        /// </summary>
        BoxPlot = 28,
        /// <summary>
        /// 砖形图类型
        /// </summary>
        Renko = 29,
        /// <summary>
        /// 新三值图类型
        /// </summary>
        ThreeLineBreak = 30,
        /// <summary>
        /// 卡吉图类型
        /// </summary>
        Kagi = 31,
        /// <summary>
        /// 点数图类型
        /// </summary>
        PointAndFigure = 32,
        /// <summary>
        /// 漏斗图类型
        /// </summary>
        Funnel = 33,
        /// <summary>
        /// 棱锥图类型
        /// </summary>
        Pyramid = 34,
    }
    #region 使用方式
    //            ChartHelper charthelper = new ChartHelper();
    //            string saveurl = @"C:\Users\zq\Documents\visual studio 2013\Projects\Seal_Main\Seal_Console\bin\Debug\PDFDOCUMENT\123.jpeg";
    //            List<string> names = new List<string>() {
    //                "北京",
    //                "上海",
    //                "广州",
    //                "深圳",
    //                "重庆"
    //            };
    //            List<float> values = new List<float>() {
    //                1962.24f,
    //                2301.91f,
    //                1270.08f,
    //                1035.79f,
    //                2884.62f
    //            };
    //            charthelper.GenerateChart("2013~2014城市人口统计", names, values, saveurl, ChartType.Column, 500, 400, "城市", "人口", ChartTheme.Vanilla);
    #endregion
}

四:后记

  Mvc Chart做为一个轻量的VS自带图表插件,操作过程简单、快速。但默认样式过于简陋,如果要自定义样式,并不轻松,可尝试ChartTheme的自定义扩展。另外,为了更好的体验效果,Mvc Chart并不能替代Highcharts等前端JS图表插件。

程序环境:Win8.1, Visual Studio 2013 Professional 2013 Update3, MVC 4, System.Web.Helpers 程序版本v2.0.0 运行时版本v4.0.30319

时间: 2024-11-07 01:45:33

利用MVC Chart 打造后台图表、前端图表的相关文章

Chart FX for Java Server 图表解决方案控件下载及介绍

Chart FX for Java Server为有多种数据展示需求的开发者提供一个现成的图表解决方案.Chart FX 7 for Java Server建立在以Chart FX for Java 6.5 Developer为基础的企业质量技术上, 通过增加一个框架独立,基于Ajax的运行时用户界面来使您的图表,地图和统计图提供丰富的用户接口元素,这些元素具有零空间占用或者插件的需求 具体功能: 易于编码和整合 Chart FX通过最小的整合就可以提供开发者高级图表特性.拥有很有用的工具,比如

利用配置文件实现后台和前端的参数统一修改。

很多情况需要后台操作前端的数据,例如管理员在后台设置参数,前台显示的参数会同步修改. 这里运用以下几个函数及变量. $_SERVER['DOCUMENT_ROOT'] file_put_contents strip_whitespace var_export $_SERVER['DOCUMENT_ROOT']是PHP预定义的几个变量之一.作用是:获取当前运行脚本所在的文档根目录.该根目录是由服务器配置文件中定义.例如apache配置文件httpd.conf中DocumentRoot配置项的值.

如何利用阿里云打造感知零售平台

摘要: 一.背景介绍所谓感知零售是指的根据店铺顾客的情绪变化以及顾客在店铺内对商品货架停留位置来判断顾客对商品感兴趣程度,实时在线调整营销策略.帮助企业第一时间掌握顾客感受,第一时间下发营销策略,第一时间得到营销效果反馈. 原文地址:http://click.aliyun.com/m/43688/ 一.背景介绍 所谓感知零售是指的根据店铺顾客的情绪变化以及顾客在店铺内对商品货架停留位置来判断顾客对商品感兴趣程度,实时在线调整营销策略.帮助企业第一时间掌握顾客感受,第一时间下发营销策略,第一时间得

基于spring mvc 移动终端后台开发

基于spring mvc 移动终端后台开发 研发背景 到年底了,很多项目都要突击完成,我们自己的"问题及知识管理平台"移动端研发也到了不能再拖的地步,所以需要在后台集成移动端框架.由于后台架构采用spring mvc+hibernate,并且近期也深入的研究过spring mvc,所以就不想沿用已有成熟的整合方案<HTML5企业移动应用解决方案V1.0.doc>,尝试完全应用spring framework技术实现移动端后台架构. 根据技术特点和我的一些架构封装想法,给自己

ASP.NET MVC搭建项目后台UI框架—1、后台主框架

目录 ASP.NET MVC搭建项目后台UI框架-1.后台主框架 ASP.NET MVC搭建项目后台UI框架-2.菜单特效 ASP.NET MVC搭建项目后台UI框架-3.面板折叠和展开 ASP.NET MVC搭建项目后台UI框架-4.tab多页签支持 ASP.NET MVC搭建项目后台UI框架-5.Demo演示Controller和View的交互 ASP.NET MVC搭建项目后台UI框架-6.客户管理(添加.修改.查询.分页) ASP.NET MVC搭建项目后台UI框架-7.统计报表 ASP

利用MVC、Unity将Service实现Restful

现在移动设备端的需求越来越大,要满足其数据要求的一种方式就是实现Restful,脱离具体的后台支持方式.在微软的实现方式中,我们需要利用VS建立web API项目,利用 System.Web.Http就可以实现将自己的控制发布出来. public class OutValuesController : ApiController { // GET api/values public IEnumerable<string> Get() { return new string[] { "

Thinkphp -- 利用MVC模式完成注册登录功能

这是一篇记录向,记录我后台的学习过程. 如有不正确的地方,请多多指教. 基础知识: MVC即 Model View Controller Model(模型)表示应用程序核心(比如数据库记录列表). View(视图)显示数据(数据库记录). Controller(控制器)处理输入(写入数据库记录). (图源https://www.runoob.com/design-pattern/mvc-pattern.html) 当我们浏览一个网页的时候首先会访问到View(视图层) 在我们输入用户名密码之后,

IOC容器特性注入第六篇:利用MVC注入点,把容器启动

这里是利用MVC三个注入点中的:IDependencyResolver 进行注入 在全局类中Global.asax代码如下: #region MVC Inject System.Web.Mvc.DependencyResolver.SetResolver(new DaHua.Sites.DependencyResolve(DaHua.Common.Runtime.EngineContext.Current, System.Web.Mvc.DependencyResolver.Current));

ASP.NET MVC搭建项目后台UI框架—7、统计报表

ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NET MVC搭建项目后台UI框架—4.tab多页签支持 ASP.NET MVC搭建项目后台UI框架—5.Demo演示Controller和View的交互 ASP.NET MVC搭建项目后台UI框架—6.客户管理(添加.修改.查询.分页) ASP.NET MVC搭建项目后台UI框架—7.统计报表 本节,我将通