D3.js 柱形图

柱形图是使用柱形的长短来表示数据的变化的图标,也是最简单的图表之一;
完整的柱形图包括柱形、坐标轴和文字。本次先只绘制矩形和文字。

柱形图效果:
这里写图片描述
代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
    <script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>  
    <script>
        let dataset = [50, 43, 120, 87, 99, 167, 300];
        // svg绘制区域的宽度
        let width = 400; 
        // svg绘制区域的高度
        let height = 400; 
        // 选择body
        let svg = d3.select('body')
          // 添加svg
          .append('svg')
          // 设置svg的宽度属性
          .attr('width', width)
          // 设置svg的高度属性
          .attr('height', height);
        // 定义上下左右的边距
        let padding = {
          top: 20,
          right: 20,
          bottom: 20,
          left: 20
        };
        // 矩形所占宽度(包括百空), 单位像素
        let rectStep = 35;
        // 矩形所占宽度(不包括百空), 单位像素
        let rectWidth = 30;
        // 选择所有rect
        let rect = svg.selectAll('rect')
          // 绑定数据
          .data(dataset)
          // 获取enter部分
          .enter()
          // 添加rect元素, 使其与绑定数据的长度一致
          .append('rect')
          // 设置眼色为steelblue
          .attr('fill', 'steelblue')
          // 设置矩形的x坐标
          .attr('x', function (d, i) {
            // svg左内边距 每个矩形的位置
            return padding.left + i * rectStep
          })
          // 设置矩形的y坐标
          .attr('y', function (d) {
            return height - padding.bottom - d;
          })
          // 设置矩形的宽度
          .attr('width', rectWidth)
          // 设置矩形的高度
          .attr('height', function (d) {
            return d;
          });
          // 接下来为矩形添加标签文字, 方法与添加rect一样,先用selectall()选择一个空集,然后再为选择集denter部分添加足够数量的text元素。
          let text = svg.selectAll('text')
            // 绑定数据
            .data(dataset)
            // 获取enter部分
            .enter()
            // 添加text元素,使其与绑定数组的长度一致
            .append('text')
            // 设置文字填充色
            .attr('fill', 'white')
            // 设置字体大小
            .attr('font-size', '14px')
            // 后续为文字设置为矩形正中间 
            .attr('text-anchor', 'middle')
            // 设置x的与矩形一样
            .attr('x', function (d, i) {
              return padding.left + i * rectStep;
            })
            // 设置y的与矩形一样
            .attr('y', function (d) {
              return height - padding.bottom -d;
            })
            .attr('dx', rectWidth / 2)
            .attr('dy', '1em')
            // 输出文字
            .text(function (d) {
              return d;
            })
    </script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很好,以下是实现这个需求的步骤: 1. 准备数据:你需要有一组收集处理后的数据,例如一个数组或者一个 JSON 对象。数据应该包括每个柱子的名称和高度。 2. 导入 D3.js 库:在 HTML 中导入 D3.js 库,例如: ```html <script src="https://d3js.org/d3.v6.min.js"></script> ``` 3. 创建 SVG 元素:使用 D3.js 创建 SVG 元素,例如: ```javascript const svg = d3.select("body") .append("svg") .attr("width", width) .attr("height", height); ``` 其中 `width` 和 `height` 是 SVG 元素的宽度和高度。 4. 创建柱形图:使用 D3.js 创建柱形图,例如: ```javascript const bars = svg.selectAll("rect") .data(data) .enter() .append("rect") .attr("x", (d, i) => i * barWidth) .attr("y", d => height - d.height) .attr("width", barWidth - barPadding) .attr("height", d => d.height) .attr("fill", barColor); ``` 其中 `data` 是数据,`barWidth` 是每个柱子的宽度,`barPadding` 是柱子之间的间距,`barColor` 是柱子的颜色。 5. 创建图例:使用 D3.js 创建图例,例如: ```javascript const legend = svg.selectAll(".legend") .data(data) .enter() .append("g") .attr("class", "legend") .attr("transform", (d, i) => `translate(${width - 100},${i * 20})`); legend.append("rect") .attr("x", 0) .attr("y", 0) .attr("width", 18) .attr("height", 18) .attr("fill", barColor); legend.append("text") .attr("x", 25) .attr("y", 9) .attr("dy", ".35em") .text(d => d.name); ``` 其中 `name` 是每个柱子的名称。 6. 增加交互性功能:使用 D3.js 增加交互性功能,例如: ```javascript bars.on("mouseover", function(d) { d3.select(this).attr("fill", "red"); }) .on("mouseout", function(d) { d3.select(this).attr("fill", barColor); }) .on("click", function(d) { console.log(d.name); }); ``` 其中 `mouseover` 和 `mouseout` 事件用于鼠标悬停和移开时改变柱子的颜色,`click` 事件用于点击柱子时输出其名称。 以上是使用 D3.js 绘制柱形图、增加图例和交互性功能的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值