使用 d3.js 将画布(图表.js折线图)放置在 SVG 中



我第一次尝试用a这样做,效果很好。

<button type="button" class="btn btn-default glyphicon glyphicon-arrow-left"></button>

但是,当我尝试对画布对象执行相同的操作时,在这种情况下,由图表.js库生成的折线图不起作用。我正在使用 d3.js 将图表插入 svg 中。我还在我的 angularjs 图表.js指令中放置了一个断点(我正在使用 chart.js 通过指令),我注意到根本没有调用该指令。

带有图表.js画布的异物正在插入到 html 中,只是没有呈现。

<foreignObject x="5" y="5">
  <canvas id="line" class="chart chart-line" data="data" labels="labels" legend="true" series="series" click="onClick"></canvas>
</foreignObject>

还有其他人有类似的问题吗?

查看生成的 HTML

您需要在异物上设置高度和宽度对象

  d3.select("svg")
     .append("foreignObject")
         .attr("width", 480)
         .attr("height", 500)

并将画布追加到外来对象下的正文元素

  ...
  .append("xhtml:body")
      .html('<canvas id="line" class="chart chart-line" data="data" labels="labels" legend="true"></canvas>');

这是一个工作片段(请与 Chrome 联系)

var app = angular.module("app", ["chart.js"]);
app.controller("chartController", ['$scope',
  function($scope) {
    $scope.labels = ["January", "February", "March", "April", "May", "June", "July"];
    $scope.data = [
      [65, 59, 80, 81, 56, 55, 40],
      [28, 48, 40, 19, 86, 27, 90]
    ];
  }
])
d3.select("svg")
  .append("foreignObject")
  .attr("width", 480)
  .attr("height", 500)
  .append("xhtml:body")
  .html('<canvas id="line" class="chart chart-line" data="data" labels="labels"></canvas>');
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<script src="https://rawgit.com/nnnick/Chart.js/master/Chart.min.js"></script>
<link href="https://rawgit.com/jtblin/angular-chart.js/master/dist/angular-chart.css" rel="stylesheet" />
<script src="https://rawgit.com/jtblin/angular-chart.js/master/dist/angular-chart.min.js"></script>
<div ng-app="app">
  <div ng-controller="chartController">
    <svg width="960" height="500"></svg>
  </div>
</div>

最新更新