開源庫Magicodes.ECharts使用教程


 



目錄

1    概要    2

2    Magicodes.ECharts工作原理    3

2.1    架構說明    3

2.1.1    Axis    4

2.1.2    CommonDefinitions    4

2.1.3    Components    4

2.1.4    JsonConverter    4

2.2    Series    6

2.3    ValueTypes    6

2.4    EChartsOptions    7

2.5    TimelineOptions    8

3    Magicodes.EchartsJs    8

3.1    全局配置    8

3.2    組件配置    8

3.3    Demo    9

4    5分鍾上手Magicodes.EChart    9

4.1    獲取EChart    9

4.2    引用Magicodes.ECharts    9

4.3    引用Echart相關腳本    10

4.4    編寫第一個圖表    11

4.4.1    編寫控制器代碼    11

4.4.2    編寫前端代碼    12

4.4.3    效果    12

4.5    編寫動態圖表    13

5    相關示例    13

 

博客使用Word發博,發布后,排版會出現很多問題,一一修正工作量極大,敬請諒解。可加群獲取原始文檔。

  1. 概要

Magicodes.ECharts是心萊團隊基於百度EChart封裝的開源的.NET類庫,以便讓用戶更快更便捷的上手開發EChart圖表。本篇主要講解Magicodes.ECharts的相關使用。

注意:EChart圖表插件是由百度提供的一套前端圖表庫,可以流暢運行在PC端和移動設備上。Echarts具備完善的兼容性和豐富的圖表類型,目前已經存在2.0和3.0兩個版本,Magicodes.ECharts針對的是最新版本的封裝。ECharts的官網為:http://echarts.baidu.com/

官方博客:http://www.cnblogs.com/codelove/

相關開源庫地址:https://github.com/xin-lai

在開始之前,您需要了解以下內容:

  • Magicodes.ECharts是基於百度EChart封裝的開源的.NET類庫,封裝的目的便於使用強類型語言約束后台代碼,以便於更好維護和重構代碼,並且封裝自身業務
  • Magicodes.EChartsJS是基於knockoutJs封裝的組件,結合Magicodes.ECharts能夠很方便的利用Ajax加載Echart圖表
  • 目前Magicodes.ECharts已經支持大部分圖表,但是尚不能支持所有圖表和所有情形
  • 本着按需設計的原則,在遇到不支持的情形,希望您能夠自行擴展並貢獻自己的代碼。眾人拾材火焰高,Magicodes.ECharts在不斷地實踐中會更加完善的
  • 在設計上,我們不會過多設計,但是后續版本可能會不斷地進行重構
  1. Magicodes.ECharts工作原理

  1. 架構說明

Magicodes.ECharts目前主要由以下部分組成:

  1. Axis

直角坐標系 grid 中的軸的相關配置封裝,比如x軸、y軸等。

  1. CommonDefinitions

通用定義,目前定義了以下內容:

  • Align(水平對齊)
  • Label(標簽)
  • Orients(圖例列表的布局朝向)
  • Symbols(標記的圖形)
  • TextAlign(標題文本水平對齊)
  • TextStyles(文本樣式)
  • VerticalAlign(垂直對齊)
  1. Components

組件定義。目前定義了以下內容:

  • DataZoom(區域縮放)
    • DataZoomInside(內置型數據區域縮放組件)
    • DataZoomSlider(滑動條型數據區域縮放組件)
  • Grid(直角坐標系內繪圖網格)
  • Legend(圖例組件)
  • TimeLine(timeline 組件)
  • Title(標題)
  • ToolBox(工具箱)
  • ToolTip(提示框組件)
  1. JsonConverter

定義了一些自定義實現的JSON轉換器,依賴自JSON.NET。

  • ValueConverter

ValueConverter用於相關值JSON轉換,需要實現IValue<T>接口。如下面例子:

/// <summary>

/// 小數數組

/// </summary>

[JsonConverter(typeof(ValueConverter<double[]>))]

public class ArrayNumberValue : IValue<double[]>, INumberOrArrayNumberValue

{

public double[] Value { get; set; }

}

/// <summary>

/// 數值

/// </summary>

[JsonConverter(typeof(ValueConverter<double>))]

public class NumberValue : ILeftValue, ITopValue, IRightValue, IBottomValue, IValue<double>, INumberOrArrayNumberValue, INumberOrStringValue

{

public NumberValue(double? value = null)

{

if (value.HasValue)

{

Value = value.Value;

}

}

public double Value { get; set; }

}

接下來,在DataZoom組件上用到了我們的定義,如下所示:

public abstract class DataZoom

{

….省略其他代碼

/// <summary>

/// 設置 dataZoom-inside 組件控制的 y軸(即yAxis,是直角坐標系中的概念,參見 grid)。

/// 不指定時,當 dataZoom-inside.orient 為 'vertical'時,默認控制和 dataZoom 平行的第一個 yAxis。但是不建議使用默認值,建議顯式指定。

/// 如果是 number 表示控制一個軸,如果是 Array 表示控制多個軸。

/// </summary>

public INumberOrArrayNumberValue XAxisIndex { get; set; }

}

在使用時,我們可以這樣賦值:

new DataZoomInside()

{

Start=30,

End=70,

XAxisIndex=new ArrayNumberValue() {Value=new double[] { 0,1} }

}

 

當然也可以給其賦予數值:

new DataZoomInside()

{

Start=30,

End=70,

//XAxisIndex=new ArrayNumberValue() {Value=new double[] { 0,1} }

XAxisIndex=new NumberValue(1)

}

在生成JSON時,改轉換器會生成對應正確的JSON,如下圖所示:

  1. Series

定義了系列。每個系列通過 Type 決定自己的圖表類型。

目前定義有:

  • BarSeries
  • LineSeries
  • 其他圖表類型大都可以通過實例化基類然后指定系列類型

 

  1. ValueTypes

值類型。因EChart的許多屬性配置均可以支持不同的數據類型和對象,Magicodes.Echarts特對此進行了封裝,以進行約束。目前定義有以下值類型:

  • AlignValue
  • ArrayNumberValue
  • DoubleValue
  • IBottomValue
  • ILeftValue
  • INumberOrArrayNumberValue
  • INumberOrStringValue
  • IRightValue
  • ISymbolValue
  • ITopValue
  • IValue
  • NumberValue
  • StringValue
  • SymbolValue
  • VerticalAlignValue

具體使用請參考本框架源碼。

  1. EChartsOptions

EChart配置基類。允許設置各個組件和對象來定義Echart。

如下面Demo:

[HttpGet]

public JavaScriptJsonResult Demo1()

{

var provinces = new List<object>() { "岳陽", "長沙", "北京", "上海", "武漢", "貴州", "大連", "成都", "深圳" };

var valueList = new List<object>() { 50, 100, 130, 39, 31, 66, 11, 34, 9 };

var chartOptions = new EChartsOption

{

Title = new Title("粉絲分布統計圖") { Left = new AlignValue(Align.center) },

Series = new Series.Series[]

{

new BarSeries

{

Name = "粉絲分布",

Data = valueList,

MarkPoint = new MarkPoint

{

Data = new List<MarkData>

{

new MarkData {Type = MarkPointDataTypes.max, Name = "最大值"},

new MarkData {Type = MarkPointDataTypes.min, Name = "最小值"}

}

},

MarkLine = new MarkLine

{

Data = new List<MarkData>

{

new MarkData {Type = MarkPointDataTypes.average, Name = "平均值"}

}

}

}

},

XAxis = new XAxis[1] { new XAxis { Type = AxisTypes.category, Data = provinces } },

YAxis = new YAxis[1] { new YAxis { Type = AxisTypes.value } }

};

return this.ToEChartResult(chartOptions);

}

  1. TimelineOptions

Timeline配置基類。允許設置各個組件和對象來定義Echart。

 

  1. Magicodes.EchartsJs

Magicodes.EChartsJs為針對Echart封裝的Ajax加載的knockoutjs庫,需要依賴以下javascript庫:

  • Jquery
  • Knockoutjs

關於Magicodes.EChartsJs,你可以在開源庫源碼中的項目Magicodes.ECharts.Demo找到。

該組件主要有以下配置:

  1. 全局配置

基於window.mcs.echarts.settings進行配置,比如設置全局主題:

mcs.echarts.settings.theme="macarons"

  1. 組件配置

  • ajaxUrl:Ajax加載路徑
  • isBlockUI:是否顯示加載遮罩層
  • theme:主題
  1. Demo

<div data-bind='component:{name: "echart",params: { ajaxUrl: "/ChartDemo/Demo1" ,theme:"macarons"}}' style="height: 280px; width: 100%"></div>

<div data-bind='component:{name: "echart",params: { ajaxUrl: "/ChartDemo/Demo2" ,theme:"macarons"}}' style="height: 280px; width: 100%"></div>

<div data-bind='component:{name: "echart",params: { ajaxUrl: "/ChartDemo/Demo3" ,theme:"macarons"}}' style="height: 800px;width: 100%"></div>

  1. 5分鍾上手Magicodes.EChart

    1. 獲取EChart

你可以在此下載EChart:http://echarts.baidu.com/download.html

  1. 引用Magicodes.ECharts

使用Nuget包下載,請分別下載:

  • Magicodes.ECharts
  • Magicodes.ECharts.Mvc
  • Magicodes.EChartsJs

相關操作如下圖所示:

 

也可以在Github下載源代碼引用,地址為:https://github.com/xin-lai/Magicodes.ECharts

  1. 引用Echart相關腳本

推薦使用ASP.NET Bundle技術,配置如下所示:

//echarts

bundles.Add(new ScriptBundle("~/plugins/echarts").Include(

"~/Scripts/plugins/echart/echarts.js",

"~/Scripts/plugins/echart/theme/macarons.js",

"~/Scripts/components/magicodes.echart.js"));

注意:如果使用到了相關主題,請注意引用主題腳本。

那么在View頁引用如下:

@Scripts.Render("~/bundles/jquery")

@Scripts.Render("~/bundles/knockout")

@Scripts.Render("~/bundles/bootstrap")

@Scripts.Render("~/plugins/echarts")

其中,Jquery、Knockoutjs、Echarts腳本是必須的,其他請按需引用。

  1. 編寫第一個圖表

    1. 編寫控制器代碼

首先我們需要編寫控制器代碼,以便Ajax調用。如下所示:

[HttpGet]

public JavaScriptJsonResult Demo2()

{

var data = new List<object>() {

new {value=400, name= "搜索引擎"},

new {value=335, name="直接訪問"},

new {value=310, name="郵件營銷"},

new {value=274, name="聯盟廣告"},

new {value=235, name="視頻廣告"}

};

var chartOptions = new EChartsOption

{

Title = new Title("搜索來源") { Left = new AlignValue(Align.center) },

Series = new Series.Series[]

{

new Series.Series

{

Name = "訪問來源'",

Data = data,

Type=SeriesTypes.pie,

Radius="55%",

}

}

};

return this.ToEChartResult(chartOptions);

}

請注意引用相關命名空間,並注意,ToEChartResult為擴展方法,用於將上述配置對象輸出為JSON序列化內容。

  1. 編寫前端代碼

前端組件代碼如下:

<div data-bind='component:{name: "echart",params: { ajaxUrl: "/ChartDemo/Demo2" ,theme:"macarons"}}' style="height: 280px; width: 100%"></div>

 

注意,定義好Echart組件之后,我們還需要在頁面上添加以下代碼:

@section Scripts

{

<script>

$(function () {

ko.applyBindings({});

});

</script>

}

該腳本用於綁定KO組件,請務必添加。

  1. 效果

至此,代碼編寫完畢,效果如下所示:

  1. 編寫動態圖表

有時候,我們希望圖表能夠即時的進行數據刷新並動態變化,那么使用Magicodes.EChartsJs就比較簡單了,如下面Demo:

<script>

$(function () {

var viewModel = function () {

var self = this;

this.demo4Url = ko.observable('/ChartDemo/Demo1');

this.init = function () {

//設置定時器

setInterval(function () {

//可以通過Url傳參

self.demo4Url(self.demo4Url() == '/ChartDemo/Demo1' ? '/ChartDemo/Demo2' : '/ChartDemo/Demo1');

}, 2000);

};

self.init();

};

ko.applyBindings(new viewModel());

});

</script>

HTML:

<div class="row">

<div class="col-md-12">

<h2>Demo4——動態圖</h2>

<div data-bind='component:{name: "echart",params: { ajaxUrl: demo4Url ,theme:"macarons"}}' style="height: 400px;width: 100%"></div>

</div>

</div>

上述Demo實現了圖表每隔兩秒的刷新,會自動從Demo1切換為Demo2的圖表,在實際應用中,您可以可以通過Url傳參或者按照自身業務來動態加載圖表數據。

由上面代碼得知,Magicodes.EChartsJs組件的ajaxUrl參數不僅僅支持字符串,還支持綁定ko的監視器,如果圖表需要即時刷新,只需要給監視器賦值就可以了,當值產生變化時,圖表會自動刷新,如下面代碼:

self.demo4Url(self.demo4Url() == '/ChartDemo/Demo1' ? '/ChartDemo/Demo2' : '/ChartDemo/Demo1');

 

  1. 相關示例

目前在開源庫中,定義了4個Demo,如下圖所示:

下面是我們使用該組件在實踐中的一些示例:

目前Magicodes.ECharts尚不能支持所有圖表和所有情形,如果你對本項目有興趣,可以貢獻自己的代碼哦。本着按需設計的原則,Magicodes.ECharts在不斷地實踐中會更加完善的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM