/// <summary> /// refer: https://www.cnblogs.com/kulong995/p/5237796.html /// </summary> /// <returns></returns> public static string TemperatureBar() { ChartOption option = new ChartOption(); option.Title().Text("温度计式图表").Subtext("Form ExcelHome"). Sublink("http://e.weibo.com/1341556070/AizJXrAEa"); option.ToolTip().Trigger(TriggerType.axis) // 原作者嘅 code,好似有 bug,暫時取消 //.Formatter(new JRaw(@"function (params){ // return params[0].name + '<br/>' // + params[0].seriesName + ' : ' + params[0].value + '<br/>' // + params[1].seriesName + ' : ' + (params[1].value + params[0].value); // }")) .AxisPointer().Type(AxisPointType.shadow); option.Legend().Data("Acutal", "Forecast"); Feature feature = new Feature(); feature.Mark().Show(true); feature.DataView().Show(true).ReadOnly(false); feature.Restore().Show(true); feature.SaveAsImage().Show(true); option.ToolBox().Show(true).SetFeature(feature); option.Grid().Y(80).Y2(30); CategoryAxis x = new CategoryAxis(); x.Data("Cosco", "CMA", "APL", "OOCL", "Wanhai", "Zim"); option.XAxis(x); ValueAxis y = new ValueAxis(); y.BoundaryGap(new List <double>() { 0, 0.1 }); option.YAxis(y); var tomatoStyle = new ItemStyle(); tomatoStyle.Normal().Color("tomato").BarBorderRadius(0) .BarBorderColor("tomato").BarBorderWidth(6) .Label().Show(true).Position(StyleLabelType.insideTop); Bar b1 = new Bar("Acutal"); b1.Stack("sum"); b1.SetItemStyle(tomatoStyle); b1.Data(260, 200, 220, 120, 100, 80); var forecastStyle = new ItemStyle(); var pattern = @"(""(?:[^""\\]|\\.)*"")|\s+"; // remove space and CRLF var raw = @"function (params) {for (var i = 0, l = option.xAxis[0].data.length; i < l; i++) {if (option.xAxis[0].data[i] == params.name) {return option.series[0].data[i] + params.value;}}}"; var formatter = string.Format(@"eval(""{0}"")", raw); var tmp = new JRaw(raw); //! HACK: Formatter 去到 EChartsBox.html script 會出 JSON.parse error forecastStyle.Normal().Color("#fff").BarBorderRadius(0) .BarBorderColor("tomato").BarBorderWidth(6) .Label().Show(true).Position(StyleLabelType.top) .Formatter(new JRaw(@"function (params) { for (var i = 0, l = option.xAxis[0].data.length; i < l; i++) { if (option.xAxis[0].data[i] == params.name) { return option.series[0].data[i] + params.value; } } }")) //.Formatter(new JRaw(formatter)) .TextStyle().Color("tomato"); Bar b2 = new Bar("Forecast"); b2.Stack("sum"); b2.SetItemStyle(forecastStyle); b2.Data(40, 80, 50, 80, 80, 70); option.Series(b1, b2); var result = JsonHelper.ObjectToJson2(option); return(result); }