コード例 #1
0
        /// <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);
        }