javascript - 剑道UI图表: adjust label amount dynamically

标签 javascript kendo-chart

我有一个可缩放的区域图和每个数据点的 x 轴标签。当图表加载时,标签太多,因此我设置了 step 选项:

categoryAxis: {
    name: 'CatAxis',
    categories: graphLabels,
    step: 30
}

但是当用户放大时,我需要减少步数,否则根本不会显示任何标签。
因此,我订阅了 zoomEnd 事件并计算所需的步长:
function onZoomEnd(e) {
    var xRange = e.axisRanges.CatAxis;
    if (xRange) {
    var diff = xRange.max - xRange.min;
    var step = 1;
    while (diff / step > 6) {
        step++;
    }
    e.sender.setOptions({ categoryAxis: { labels: { step: step } } });
}

但是在此处设置选项会导致图表刷新,从而失去其缩放级别。最终目标是在放大和缩小时显示合理数量的标签,而不会重叠或消失。任何想法如何实现这一目标?

最佳答案

您可以使用文档中的以下示例保持图表的缩放级别
https://docs.telerik.com/kendo-ui/knowledge-base/maintain-pan-zoom-state

<button id="rebind">Rebind Chart</button>
<div id="chart"></div>
<script>
  // Sample data
  var data = [];
  for (var i = 0; i < 100; i++) {
    var val = Math.round(Math.random() * 10);
    data.push({
      category: "C" + i,
      value: val
    });
  }

  function createChart() {
    var axisMin = 0;
    var axisMax = 10;

    function updateRange(e) {
      var axis = e.sender.getAxis('axis')
      var range = axis.range()
      axisMin = range.min;
      axisMax = range.max;
    }

    function restoreRange(e) {
      e.sender.options.categoryAxis.min = axisMin;
      e.sender.options.categoryAxis.max = axisMax;
    }

    $("#chart").kendoChart({
      renderAs: "canvas",
      dataSource: {
        data: data
      },
      categoryAxis: {
        name: "axis",
        min: axisMin,
        max: axisMax,
        labels: {
          rotation: "auto"
        }
      },
      series: [{
        type: "column",
        field: "value",
        categoryField: "category"
      }],
      pannable: {
        lock: "y"
      },
      zoomable: {
        mousewheel: {
          lock: "y"
        },
        selection: {
          lock: "y"
        }
      },
      zoom: updateRange,
      drag: updateRange,
      dataBound: restoreRange
    });
  }

  $("#rebind").click(function() {
    $("#chart").data("kendoChart").dataSource.read();
  });

  $(document).ready(createChart);
</script>

关于javascript - 剑道UI图表: adjust label amount dynamically,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40213245/

相关文章:

javascript - 如何让我的菜单保持使用滚动功能?

javascript - 使用 Promise 更新数据源时刷新 Kendo 图表

javascript - 值轴标题点击事件

javascript - 从股票图表中删除 $ 符号

javascript - 如何在 Kendo UI 折线图上将时间标记为 "hh:mm:ss"

javascript - 我可以在用 JS 创建的 HTML5 视频元素上指定多个源元素吗?

javascript - 类型错误 : must be string or buffer, 不是实例

javascript - d3 v5.8 是否发布了使用数字时样式的中断过渡?

javascript - 当鼠标悬停事件发生时出现光标可点击图标

javascript获取网页中选定文本的段落