D3 入门简要指南
介绍
然后,我们将提供一些“下一步”任务,以及更多信息和参考资料的链接。让我们开始吧。
设置和验证
有几种方法可以在您的机器上设置 d3js 环境,我们将在本节中探讨每种方法。
首先,您可以在原始<script>标签中使用 d3js,如下所示:
      <script src="https://d3js.org/d3.v5.min.js"></script>
    
这将公开一个d3全局变量,您可以通过键入以下内容来验证这一点
      console.log(d3.version);
    
在浏览器的控制台中。此语句将打印出您正在使用的 d3js 版本,在撰写本文时为5.9.2 。
第二种选择是通过包管理器(如npm或yarn)安装 d3js ,使用捆绑器创建一个捆绑包,然后相应地导入 d3。
      import * as d3 from "d3";
    
第三种选择是在 nodejs 中使用 d3js,如下所示:
      var d3 = require("d3");
    
为了本指南的简单性,我们使用第一种方法(使用<script>标签)来设置我们的环境。
概念
使用 d3-scale 进行抽象数据到视觉表示的映射
直接使用 SVG(“可缩放矢量图形”)进行编程时,通常对简单矩形执行以下操作:
      <svg>
    <g>
        <rect x="0" y="0" height="100" width="50">
        </rect>
    </g>
</svg>
    
可以想象,在条形图中,我们需要创建许多<rect>元素,计算它们的属性,并将它们附加到<svg>元素。这本身就是一项艰巨的任务,而d3-scale可以帮助我们进行计算。根据官方文档,我们将对x使用scaleBand()方法,对y使用scaleLinear()方法。在我们的例子中,这些是用于计算矩形的x、y、高度和宽度属性的构建块。
我们将使用以下逻辑来创建x和y比例函数:
      var x = d3.scaleBand()
  .domain(DOMAIN_OF_DATA)
  .range([RANGE_LEFT, RANGE_RIGHT]);
var y = d3.scaleLinear()
  .domain([0, MAX_OF_VALUE_DATA])
  .range([RANGE_BOTTOM, RANGE_TOP]);
    
请注意,scales执行从domain到range的映射。
使用 d3-axis 渲染刻度的可读标记
除了矩形之外,我们还需要在条形图中添加 x 轴和 y 轴。这就是d3-axis派上用场的地方。我们希望有一个底部轴作为x 轴,一个左侧轴作为y 轴。以下是创建它们的代码片段:
      var xAxis = g => g
  .attr("transform", `translate(0,${height - margin.bottom})`)
  .call(d3.axisBottom(x));
var yAxis = g => g
  .attr("transform", `translate(${margin.left},0)`)
  .call(d3.axisLeft(y));
    
请注意,SVG 坐标以左上角的点 (0, 0) 为起点。这意味着我们需要对 y 轴进行平移,以便逻辑 (0, 0) 位于左下角。有关 SVG 转换的更多详细信息,请参见此处。
数据连接模式及其用法
d3js 使用的最后一个概念是“数据连接”模式,乍一看可能有点奇怪。
      var svg = d3.select('svg');
var g = svg.append("g");
g.selectAll("rect")
  .data(data)
  .join("rect")
  .attr("x", d => x(d.name))
  .attr("y", d => y(d.value))
  .attr("height", d => y(0) - y(d.value))
  .attr("width", x.bandwidth());
    
本质上,上述代码片段使用给定的“数据”创建几个矩形元素,并相应地“连接”它们。然后它调用x和y比例函数将数据中的名称-值对映射到屏幕上正确的x和y坐标。它还计算每个矩形的高度和宽度属性。您可以通过查看 Chrome 开发者工具中的结果元素来验证结果,如下所示:
      <rect x="41.95402298850573" y="150.11923076923077" height="219.88076923076923" width="17.586206896551726"></rect>
    
网上有一些教程解释d3js中的这种模式,我个人最喜欢的是d3js作者的这篇文章。
把所有东西放在一起
了解了上述所有概念并准备好代码片段后,让我们将所有内容整合在一起以构建条形图。请注意,图表中有以下组件:
- 基于数据的文档中的矩形元素。
- 带有刻度和文本的 x 轴和 y 轴,它们建立在 x 和 y 比例函数之上。
在我们的 html 文件中,我们创建一个 svg 元素:
      <svg height="450" width="600"></svg>
    
在 javascript 中,我们首先定义数据变量:
      var data = [
  {name: "A", value: "0.08167"},
  {name: "B", value: "0.01492"},
  {name: "C", value: "0.02782"},
  {name: "D", value: "0.04253"},
  {name: "E", value: "0.12702"},
  {name: "F", value: "0.02288"},
  {name: "G", value: "0.02015"},
  {name: "H", value: "0.06094"},
  {name: "I", value: "0.06966"},
  {name: "J", value: "0.00153"},
  {name: "K", value: "0.00772"},
  {name: "L", value: "0.04025"},
  {name: "M", value: "0.02406"},
  {name: "N", value: "0.06749"},
  {name: "O", value: "0.07507"},
  {name: "P", value: "0.01929"},
  {name: "Q", value: "0.00095"},
  {name: "R", value: "0.05987"},
  {name: "S", value: "0.06327"},
  {name: "T", value: "0.09056"},
  {name: "U", value: "0.02758"},
  {name: "V", value: "0.00978"},
  {name: "W", value: "0.0236"},
  {name: "X", value: "0.0015"},
  {name: "Y", value: "0.01974"},
  {name: "Z", value: "0.00074"}
];
    
然后,我们定义高度、宽度、边距的常量变量:
      var</spa免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
 
 
                                 
                                     
                                     
                                     
                                     
                                     
                                 
                             
                                     
                                     
                                     
                                     
     
    
 
             
   
        
请先 登录后发表评论 ~