1

剣道折れ線グラフには、最大値と最小値、および上限と下限を示す水平線が必要です。

4

3 に答える 3

1

Kendo-chart Render Event Handler を介してストリップラインまたは水平線 (最小/最大/平均) を追加する

ここに画像の説明を入力

さまざまな理由で使用できるように、ここに完全なソリューションを追加したかったのです。

使用剣道 2015.3.1111版、IE11/10

MS-Chart のストリップ ラインに似た上限と下限のラインを追加するという同じ課題がありました。Kendo 2015.3.1111 以前のバージョンは、この機能をサポートしていません。

私の解決策は

  1. kendo -chart 値軸プロパティにストリップラインプロパティを追加
  2. render イベント ハンドラーを使用して、数値軸ごとにストリップラインプロパティによって提供される線を描画します。
  3. 数値軸 (y 軸) には複数のストリップラインがある場合があります

<head>に次の参照があることを確認してください

<link href="http://kendo.cdn.telerik.com/2016.2.714/styles/kendo.common.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="http://kendo.cdn.telerik.com/2016.2.714/js/kendo.all.min.js"></script>

これがストリップラインのプロパティです。レベル位置の実装はお任せします。

valueAxis: [{
            name:..
            labels:{..}   
            stripLine: [{
                value: 78,
                color: "blue",
                borderwidth: "1px",
                //"dot", "dash", "solid", "dashDot", "longDash", "longDashDot"
                dashstyle: "dot",   
                label: "In Max",
                labelposition: "",
                labelfont: "12 sans-serif"
            },
            {
                value: 70,
                color: "blue",
                borderwidth: "1px",
                dashstyle: "dot",
                label: "In Min",
                labelposition: "",
                labelfont: "12 sans-serif"
            }]
        }

2 番目に重要な点は、数値軸 (y 軸) の数です。剣道チャートの「値軸」プロパティには、値軸または値軸の配列があります。Render イベント ハンドラは、オブジェクトと配列を区別する必要があります

render: function (e) {
            if (e.sender.options.valueAxis.length) {
                $.each(e.sender.options.valueAxis, function (i, value) {
                    drawStriptLine(e.sender, value);
                });
            }
            else {
                drawStriptLine(e.sender, e.sender.options.valueAxis);
            }
        }

下のコード スニペットで drawStripline を確認できます。コードに関するいくつかの注意事項を次に示します。

  1. 軸名が一致していることを確認してください
  2. axis.slot はデータ ポイントです。データ ポイントの数がわかっている場合、データ軸は 0 から最後のデータ ポイント番号までです。より大きな数値を入力すると、最後のポイントが返されます。それ以外の場合、線は 0 から終了スロットで指定した最後のポイントまで描画されます。
  3. KendoChart プロパティ renderAs はオプションですが、canvas は render イベント ハンドラを呼び出さないため、VML または SVG を使用してください
  4. Chrome (テスト済みバージョン バージョン 52.0.2743.116 m) はまだ点線と破線をサポートしていません (実線のみ)、IE11/10 はすべてのダッシュ スタイルをサポートしています
  5. plotBands の実装は、Render Event Handler の代替としても示されています。

<!DOCTYPE html>
<html>

<head>
  <title></title>
  <meta charset="utf-8" />

  <link href="http://kendo.cdn.telerik.com/2016.2.714/styles/kendo.common.min.css" rel="stylesheet" />
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
  <script src="http://kendo.cdn.telerik.com/2016.2.714/js/kendo.all.min.js"></script>

  <!--<link href="http://kendo.cdn.telerik.com/2015.3.1111/styles/kendo.common.min.css" rel="stylesheet" />-->
  <!--<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>-->
  <!--<script src="http://kendo.cdn.telerik.com/2015.3.1111/js/kendo.all.min.js"></script>-->
</head>

<body>
  <div id="chart" />

  <script>
    var mPlotBands = [];

    mPlotBands.push({
      from: 60,
      to: 61,
      color: "red",
      borderwidth: "3px",
      borderstyle: "dashed",
      label: "Min",
      labelposition: ""
    })

     mPlotBands.push({
      from: 95,
      to: 94,
      color: "red",
      borderwidth: "3px",
      borderstyle: "dashed",
      label: "Max",
      labelposition: ""
    });


    $("#chart").kendoChart({
      renderAs: "VML", //"canvas", "SVG", "VML"
      title: {
        text: "Average In/Out Temperatures"
      },
      legend: {
        position: "bottom"
      },
      seriesDefaults: {
        type: "line"
      },
      series: [{
        name: "In Temperature",
        data: [74, 74, 76, 78, 74, 70],
        axis: "intemperature"
      }, {
        name: "Out Temperature",
        data: [45, 65, 75, 95, 80, 70],
        axis: "outtemperature"
      }],
      categoryAxis: {
        name: "CategoryAxis",
        categories: ["May", "June", "July", "Aug", "Sep", "Oct"]
      },
      valueAxis: [{
        name: "intemperature",
        labels: {
          format: "{0}F"
        },
        min: 50,
        max: 110,
        plotBands: [],
        stripLine: [{
          value: 78,
          color: "blue",
          borderwidth: "1px",
          dashstyle: "dot", //"dot", "dash", "solid", "dashDot", "longDash", "longDashDot"
          label: "In Max",
          labelposition: "",
          labelfont: "12 sans-serif"
        }, {
          value: 70,
          color: "blue",
          borderwidth: "1px",
          dashstyle: "dot", //"dot", "dash", "solid", "dashDot", "longDash", "longDashDot"
          label: "In Min",
          labelposition: "",
          labelfont: "12 sans-serif"
        }]
      }, {
        name: "outtemperature",
        labels: {
          format: "{0}F"
        },
        plotBands: mPlotBands,
        stripLine: [{
          value: 75,
          color: "green",
          borderwidth: "3px",
          dashstyle: "dot", //"dot", "dash", "solid", "dashDot", "longDash", "longDashDot"
          label: "Out Avg",
          labelposition: "",
          labelfont: "italic 12 sans-serif"
        }]
      }],
      render: function(e) {
        if (e.sender.options.valueAxis.length) {
          $.each(e.sender.options.valueAxis, function(i, value) {
            drawStriptLine(e.sender, value);
          });
        } else {
          drawStriptLine(e.sender, e.sender.options.valueAxis);
        }
      }
    });

    function drawStriptLine(chart, yaxis) {
      var axis = chart.getAxis(yaxis.name);
      var stripline;

      $.each(yaxis.stripLine, function(i, stripline) {
        // Locate value slot
        var slot = axis.slot(stripline.value);

        // Locate last category slot. Trying to get the last slot on the right given data x-axis plots
        var categoryAxis = chart.getAxis("CategoryAxis");
        var categorySlotBeg = categoryAxis.slot(0);
        var categorySlotEnd = categoryAxis.slot(100000);

        // Render a line element
        var line = new kendo.drawing.Path({
          stroke: {
            color: stripline.color,
            width: stripline.borderwidth,
            dashType: stripline.dashstyle
          }
        });

        line.moveTo([categorySlotBeg.origin.x, slot.origin.y]).lineTo([categorySlotEnd.origin.x, slot.origin.y]);

        var labelPos = [categorySlotEnd.origin.x - 50, slot.origin.y - 20];
        var label = new kendo.drawing.Text(stripline.label, labelPos, {
          fill: {
            color: stripline.color
          },
          font: stripline.labelfont
        });

        var group = new kendo.drawing.Group();
        group.append(line, label);

        chart.surface.draw(group);
      });
    }
  </script>

</body>

</html>

お役に立てれば。

参考文献

  1. http://docs.telerik.com/kendo-ui/controls/charts/how-to/custom-plot-bands
于 2016-08-29T19:59:52.280 に答える