对于在浏览器中绘制图形图表,目前有较多的js类库可以使用,如:ChartJS,Flot,canvasjs等,但是今天介绍的主角为国产图表库,并在apache孵化,就是大名鼎鼎的echarts。

前方高能【官方介绍】

特性 - Apache ECharts (incubating)

ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖矢量图形库 ZRender,提供直观,交互丰富,可高度个性化定制的数据可视化图表。

丰富的可视化类型

ECharts 提供了常规的折线图、柱状图、散点图、饼图、K线图,用于统计的盒形图,用于地理数据可视化的地图、热力图、线图,用于关系数据可视化的关系图、treemap、旭日图,多维数据可视化的平行坐标,还有用于 BI 的漏斗图,仪表盘,并且支持图与图之间的混搭。

除了已经内置的包含了丰富功能的图表,ECharts 还提供了自定义系列,只需要传入一个renderItem函数,就可以从数据映射到任何你想要的图形,更棒的是这些都还能和已有的交互组件结合使用而不需要操心其它事情。

你可以在下载界面下载包含所有图表的构建文件,如果只是需要其中一两个图表,又嫌包含所有图表的构建文件太大,也可以在在线构建中选择需要的图表类型后自定义构建。

多种数据格式无需转换直接使用

ECharts 内置的 dataset 属性(4.0+)支持直接传入包括二维表,key-value 等多种格式的数据源,通过简单的设置 encode 属性就可以完成从数据到图形的映射,这种方式更符合可视化的直觉,省去了大部分场景下数据转换的步骤,而且多个组件能够共享一份数据而不用克隆。

为了配合大数据量的展现,ECharts 还支持输入 TypedArray 格式的数据,TypedArray 在大数据量的存储中可以占用更少的内存,对 GC 友好等特性也可以大幅度提升可视化应用的性能。

实践

1、 使用VS2019创建一个asp.net core web项目

选择ASP.NET Core Web 应用程序,并使用Web应用程序(模型视图控制器)模板

2、使用libman添加echarts库

在解决方案资源管理器中选择项目名称->wwwroot->lib,在lib文件夹上右击,选择:添加->客户端库,弹出窗口输入echarts,自动带出最新的版本,由于使用了cdnjs,上面最新版为4.3.0,在其他的如:jsdelivr、unpkg上面最新版为4.5.0。不过使用jsdelivr、unpkg现在4.5.0版本失败,所以选择了cdnjs上面的4.3.0版本。

> 插曲:在弹出的客户端库输入内容时,如果时中文输入法,已输入部分文字,切换为英文输入法时,会导致vs2019重启,所以在客户端库窗口输入内容时一定要前切换到英文输入法

3、添加一个action,名为Echarts,并添加相应的视图

在视图中添加如下代码,idmychart的div用于放置echarts图表

    <div class="row">        <div class="col-md-12">            <div id="myechart" style="width: 100%; height: 500px;">            </div>        </div>    </div>

添加相关js的引用

<script src="~/lib/jquery/dist/jquery.js"></script><script src="~/lib/echarts/echarts.js"></script>

4、使用Echarts

准备的json数据存放到了github上面:

https://github.com/mzy666888/datajson

本文中将data.json放在wwwroot目录下面了。

在引用的的js库的下方编写js代码使用echarts显示图表。
首先定义了一个结构,用于存放数据。

function Series(type, xdata, seriesData) {        this.typeName = type;//相当于title        this.xdata = xdata;//X轴数据        this.seriesData = seriesData;//Y轴数据    }

声明一个charts实例。

> echartInstance.clear:清空当前实例,会移除实例中所有的组件和图表。清空后调用 getOption 方法返回一个{}空对象。在多次查询时需要用到清除上次添加的内容

var myEChart = echarts.init(document.getElementById('myechart'));myEChart.clear();//用于清除已存在的内容

定义option

var options = {        title: {            text: '数据曲线:',            x: 'center'        },                legend: {            data: [],            x: 'left'        },                xAxis: {            type: 'category'//必须        },        yAxis: {            type: 'value',            max: 90,            min: -10        },        series: []    }

设置myEChart的option

myEChart.setOption(options);

获取json数据显示

    $.get('/data.json').done(function (data) {        //var aa = JSON.parse(data);        var x = [];        $.each(data.List,            function (n, value) {                var xd = [], sd = [];                $.each(value.Data,                    function (m, mValue) {                        xd.push(mValue.SaveTime);                        sd.push(mValue.WorkStationData);                    });                var s = new Series(value.TypeTitleName, xd, sd);                x.push(s);            });        var xStart = data.Start;        var xEnd = data.End;        options.xAxis.data = x[0].xdata;        options.xAxis.start = xStart;        options.xAxis.end = xEnd;        $.each(x,            function (i, value) {                options.title.text += value.typeName + " ";                options.legend.data.push(value.typeName);                options.series.push({                    name: value.typeName,                    type: 'line',                    smooth: true,                    data: value.seriesData                });            });        myEChart.setOption(options);    });

说明1

此段代码是将json数据处理后,将x,y轴的数据分开存到到数组x中

        var x = [];        $.each(data.List,            function (n, value) {                var xd = [], sd = [];                $.each(value.Data,                    function (m, mValue) {                        xd.push(mValue.SaveTime);                        sd.push(mValue.WorkStationData);                    });                var s = new Series(value.TypeTitleName, xd, sd);                x.push(s);            });

说明2

对option的xAxis轴的内容进行处理

var xStart = data.Start;var xEnd = data.End;options.xAxis.data = x[0].xdata;options.xAxis.start = xStart;options.xAxis.end = xEnd;

说明3

对option的titlelegendseries轴的内容进行处理
        $.each(x,            function (i, value) {                options.title.text += value.typeName + " ";                options.legend.data.push(value.typeName);                options.series.push({                    name: value.typeName,                    type: 'line',                    smooth: true,                    data: value.seriesData                });            });

说明4

设置myEChart的option
myEChart.setOption(options);

5、运行程序

点击“CTRL+F5”运行程序,切换到相应的action,可以看到图表显示如下内容,所有的数据都正确的显示了。

到目前为止,贴出上面完整的代码,到目前为止,你已经可以使用echarts处理图表问题了:

<script type="text/javascript">    //定义类    function Series(type, xdata, seriesData) {        this.typeName = type;        this.xdata = xdata;        this.seriesData = seriesData;    }    var myEChart = echarts.init(document.getElementById('myechart'));    myEChart.clear();    var options = {        title: {            text: '数据曲线:',            x: 'center'        },        legend: {            data: [],            x: 'left'        },        xAxis: {            type: 'category'        },        yAxis: {            type: 'value',            max: 90,            min: -10        },        series: []    }    myEChart.setOption(options);    $.get('/data.json').done(function (data) {        //var aa = JSON.parse(data);        var x = [];        $.each(data.List,            function (n, value) {                var xd = [], sd = [];                $.each(value.Data,                    function (m, mValue) {                        xd.push(mValue.SaveTime);                        sd.push(mValue.WorkStationData);                    });                var s = new Series(value.TypeTitleName, xd, sd);                x.push(s);            });        var xStart = data.Start;        var xEnd = data.End;        options.xAxis.data = x[0].xdata;        options.xAxis.start = xStart;        options.xAxis.end = xEnd;        $.each(x,            function (i, value) {                options.title.text += value.typeName + " ";                options.legend.data.push(value.typeName);                options.series.push({                    name: value.typeName,                    type: 'line',                    smooth: true,                    data: value.seriesData                });            });        myEChart.setOption(options);    });</script>

6、功能扩展

6.1 图表左右空白较多

为了解决图表中左右空白较多的问题,可以在options中添加如下内容:

        grid: {            show: true,            borderColor: '#19507c',            x: 50,            x2: 50,            y: 40        },

6.2 鼠标滑过提示

上面的截图,我们使用数据划过图表时,不能现在当前时间上各项数据,在options中添加如下代码可以实现鼠标滑过显示各项数据的功能。

        tooltip: {            trigger: 'axis',            axisPointer: {                type: 'cross',                animation: false,                label: {                    backgroundColor: '#505765'                }            }        },

6.3 添加相关功能按钮

使用如下设置,添加了3个按钮,分别为:区域缩放,区域缩放还原和还原。
区域缩放:可以在图标上按住鼠标左键,用鼠标滑定一段区域,显示滑定区域的数据,相当于区域放大
区域缩放还原:还原到初始状态
还原:就是还原功能

        toolbox: {            feature: {                dataZoom: {                    yAxisIndex: 'none'                },                restore: {},                saveasImage: {}            }        },

6.4 区域缩放

dataZoom 组件 用于区域缩放,从而能自由关注细节的数据信息,或者概览数据整体,或者去除离群点的影响。

        dataZoom: [            {                show: true,                realtime: true,                start: 80,                end: 100            },            {                type: 'inside',                realtime: true,                start: 65,                end: 100            }        ],

添加完4项扩展后,完整代码如下:

<script type="text/javascript">    //定义类    function Series(type, xdata, seriesData) {        this.typeName = type;        this.xdata = xdata;        this.seriesData = seriesData;    }    var myEChart = echarts.init(document.getElementById('myechart'));    myEChart.clear();    var options = {        title: {            text: '数据曲线:',            x: 'center'        },        grid: {            show: true,            borderColor: '#19507c',            x: 50,            x2: 50,            y: 40        },        toolbox: {            feature: {                dataZoom: {                    yAxisIndex: 'none'                },                restore: {},                saveasImage: {}            }        },        tooltip: {            trigger: 'axis',            axisPointer: {                type: 'cross',                animation: false,                label: {                    backgroundColor: '#505765'                }            }        },        legend: {            data: [],            x: 'left'        },        dataZoom: [            {                show: true,                realtime: true,                start: 80,                end: 100            },            {                type: 'inside',                realtime: true,                start: 65,                end: 100            }        ],        xAxis: {            type: 'category',            offset: 30        },        yAxis: {            type: 'value',            max: 90,            min: -10        },        series: []    }    myEChart.setOption(options);    $.get('/data.json').done(function (data) {        //var aa = JSON.parse(data);        var x = [];        $.each(data.List,            function (n, value) {                var xd = [], sd = [];                $.each(value.Data,                    function (m, mValue) {                        xd.push(mValue.SaveTime);                        sd.push(mValue.WorkStationData);                    });                var s = new Series(value.TypeTitleName, xd, sd);                x.push(s);            });        var xStart = data.Start;        var xEnd = data.End;        options.xAxis.data = x[0].xdata;        options.xAxis.start = xStart;        options.xAxis.end = xEnd;        $.each(x,            function (i, value) {                options.title.text += value.typeName + " ";                options.legend.data.push(value.typeName);                options.series.push({                    name: value.typeName,                    type: 'line',                    smooth: true,                    data: value.seriesData                });            });        myEChart.setOption(options);    });</script>

·END·

DotNetCore学习站

超乎想象的.NET Core学习资源

微信号:DotNetCore学习站

前端小白在asp.net core mvc中使用ECharts相关推荐

  1. 007.Adding a view to an ASP.NET Core MVC app -- 【在asp.net core mvc中添加视图】

    索引: 目录索引 Adding a view to an ASP.NET Core MVC app 在asp.net core mvc中添加视图 2017-3-4 7 分钟阅读时长 本文内容 1.Ch ...

  2. ASP.NET Core MVC 中的 [Controller] 和 [NonController]

    Controller VS NonController 中内置的约定 在 ASP.NET Core MVC 中已经统一了 MVC 和 Web Api 及 Web Pages, 他们具有相同的 Cont ...

  3. 如何在 Asp.Net Core MVC 中处理 null 值

    译文链接:https://www.infoworld.com/article/3434624/how-to-handle-null-values-in-aspnet-core-mvc.html 传统的 ...

  4. 【18】ASP.NET Core MVC 中的 Model介绍

    ASP.NET Core MVC 中的 Model 在本视频中,我们将通过一个示例讨论 ASP.NET Core MVC 中的 Model. 我们希望最终从 Student 数据库表中查询特定的学生详 ...

  5. ASP.NET Core MVC中的 [Required]与[BindRequired]

    在开发ASP.NET Core MVC应用程序时,需要对控制器中的模型校验数据有效性,元数据注释(Data Annotations)是一个完美的解决方案. 元数据注释最典型例子是确保API的调用者提供 ...

  6. asp.net core mvc中如何把二级域名绑定到特定的控制器上

    由于公司的工作安排,一直在研究其他技术,所以一直没时间更新博客,今天终于可以停下手头的事情,写一些新内容了. 应用场景:企业门户网站会根据内容不同,设置不同的板块,如新浪有体育,娱乐频道,等等.有的情 ...

  7. ASP.NET Core MVC中的两种404错误

    我们在使用某些系统的时候,如果访问了一个不存在的地址怎么办,比如http://52abp. com/airport/fly:或者访问的地址路由和操作方法虽然存在,但是地址参数id不存在,比如https ...

  8. 在 ASP.NET Core MVC 中使用 Areas

    在 ASP.NET Core MVC 中使用 Areas 为什么要用 Areas 怎么用 Areas ⚠️使用注意 为什么要用 Areas 使用 Areas ,可以将应用程序中不同的业务模块分类,每个 ...

  9. 在ASP.NET Core MVC中构建简单 Web Api

    Getting Started 在 ASP.NET Core MVC 框架中,ASP.NET 团队为我们提供了一整套的用于构建一个 Web 中的各种部分所需的套件,那么有些时候我们只需要做一个简单的 ...

最新文章

  1. Visual Studio Code 配置 Markdown
  2. #1176 : 欧拉路·一(欧拉通路的判定)
  3. how is SAP OData count implemented in the backend
  4. 【每日一题】7月7日题目精讲—最短路
  5. C语言编程快速入门黎明,何用C语言模拟键盘输入?
  6. 【51NOD - 1523】 非回文(dfs)
  7. 基于百度语音识别API的Python语音识别小程序
  8. iphone照片永久删除怎么恢复_微信数据怎么永久删除不被恢复?只删除聊天记录没用,打开这里彻底删除!...
  9. python基础知识4——collection类——计数器,有序字典,默认字典,可命名元组,双向队列...
  10. 金蝶k3远程组件配置连接服务器,金蝶K3服务器配置工具
  11. ADS仿真学习:s2p文件导入ADS
  12. ARKit入门到精通-0.0-史小川-专题视频课程
  13. 电路板常用连接器(接插件)介绍与选型建议(板对板连接器,板对线连接器,线对线连接器等)
  14. Windows过滤驱动 WFP代码基本流程的剖析 bypass前期准备
  15. 从零开始写Python爬虫---1.1 requests库的安装与使用
  16. dfs-全排列(UPC-方案数)
  17. pulp platform 的搭建
  18. C语言中Strcpy 的使用
  19. Linux学习(Kali为蓝本)
  20. Format函数的用法

热门文章

  1. android 编译器有问题,Android Studio 3.0 Beta 2发布:解决编译器bug
  2. chromebook刷机_如何在Chromebook上拍照
  3. 如何破解您忘记的Windows密码
  4. chromebook刷机_如何将网站添加到您的Chromebook架子上
  5. 配置本地及网络yum源(详细步骤)
  6. 本文主要总结关于mysql的优化(将会持续更新)
  7. 2016 China Joy抢先看,文末有彩蛋!
  8. MyEclipse的Git配置
  9. 如何获得带时间的ping的结果
  10. python字符串格式化方法 format函数的使用