D3.js学习指北--第三章应用,冒泡排序的可视化

2023-05-16

D3学习指北–第三章应用,冒泡排序的可视化

前言

本章前面已经讲了D3选择操作,以及选择后返回的选择集的操作。那么我们应用一下,利用d3.js写一个冒泡排序的可视化。

首先第一步:分析需求

一个冒泡排序算法(这个是算法设计问题,本章我将不讨论,直接给出)

一个数据柱形图展示(这是本章应用的关键,我将一步一步讲解)

var showconf = {"left":50,"top":50,"bom":50,"right":50,"width":50};

第二部:需求技术分析:

冒泡排序算法:

var dataset =[9,8,7,6,5,4,3,2,1];
for (var i = 0; i < dataset.length; i++) {
   //因为js没有sleep函数,所以自写的休眠函数
   function sleep(time){
     return new Promise((resolve) => setTimeout(resolve, time));
   }        
   for (var k = i; k < dataset.length; k++) {
       if (dataset[i] > dataset[k]) {
           var t = dataset[i];
           dataset[i] = dataset[k];
           dataset[k] = t;
           //数据每排序一次,就进行一次柱状图显示,达到排序可视化
           await sleep(500);//休眠5秒展示可视化
       }
   }
}

柱形图展示步骤:

第一步:在body内写一个svg并在js代码内固定他的内边框padding值与柱形的宽

第二部:获取数据绑定后的三种情况selection,enter,sxit

第三步:针对selection情况我们跟新一下它的属性,

    enter情况我们添加一个rect元素,并给它添加属性

    exit情况我们删除元素–虽然我们排序不会出现这个情况

function rectshow() {
    //获取数据绑定后的三种情况
    var selection = d3.select("svg").selectAll("rect").data(dataset);
    var enter = selection.enter();
    var exit = selection.exit();
    //绑定上数据的元素处理方法
    selection.attr("x",function (d,i) {
        return i*50+showconf["left"];
    }).attr("y",function (d,i) {
        return 200-d*10-showconf["bom"];
    }).attr("width",30)
        .attr("height",function (d,i) {
            return d*10;
        }).attr("fill","blue");
    //比元素多的数据处理方法
    enter.append("rect")
        .attr("x",function (d,i) {
            return i*50+showconf["left"];
        }).attr("y",function (d,i) {
            return 200-d*10-showconf["bom"];
        }).attr("width",30)
            .attr("height",function (d,i) {
                return d*10;
            }).attr("fill","red");
    //比数据多的元素
    exit.remove();
}

为了让我们的数据更容易观察,我们在柱形上面显示数字,用到svg内标签的text标签
,在第二章我们有介绍。

方法跟柱形展示一样,不过我们添加一个text元素


数字展示步骤同柱形一样

function textshow() {
    //获取数据绑定后的三种情况
    var selection = d3.select("svg").selectAll("text").data(dataset);
    var enter = selection.enter();
    var exit = selection.exit();
    //绑定上数据的元素处理方法
    selection.attr("x",function (d,i) {
        return i*50+showconf["left"];
    }).attr("y",function (d,i) {
        return 200-d*10-showconf["bom"];
    }).attr("font-size","14px")
        .attr("text-anchor","middle")
        .attr("width","30px")
        .attr("dx",15)
        .text(function (d) {
            return d;
        });
    //比元素多的数据处理方法
    enter.append("text")
        .attr("x",function (d,i) {
            return i*50+showconf["left"];
        }).attr("y",function (d,i) {
            return 200-d*10-showconf["bom"];
        }).attr("font-size","14px")
            .attr("text-anchor","middle")
            .attr("width","30px")
            .attr("dx",15)
            .text(function (d) {
                return d;
        });
    exit.remove();
}

写完数据数字展示之后我们可以在柱形展示后加上文字展示的函数,这样随着柱形更新,文字就顺便更新了。

  全部代码整合到一起之后,我们就实现了冒泡排序的可视化,这一个小应用只是我们学习中的一个小知识,从中要学习方法而不是记住代码。

  • 第三章理论的模板的应用,即我们同时考虑呼出现的情况
  • 可视化不是把图形跟文字混到一起,而是有一个先后的顺序,即:处理内容先后分开
    按照步骤来进行合理的处理,思路清晰又不容易让我们搞混
  • 写作一个东西需要先思考我们需要做什么,思而后动让我们处于主动。

下面让我们看一下我们代码结果的演示:

视频在公众号里面有。回复“冒泡”即可获得源代码。

尾言

千里之堤,溃于蚁穴

抓住问题的小关键能让我们更好的理清自己的需求。

欢迎关注微信公众哈:流星蝴蝶没有剑
每周更新最新的学习博客

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

D3.js学习指北--第三章应用,冒泡排序的可视化 的相关文章

随机推荐

  • linux安装clang和clang-format

    EPEL网站提供了clang的RPM安装包 xff0c 所以要想在cnetOs安装clang xff0c 首先需要安装EPEL包 xff1a sudo yum install epel release 接下来安装 clang sudo yu
  • docker学习记录(2)——在 Ubuntu 16.04 上升级 Docker CE

    以root用户为例 apt get update apt get remove docker docker engine docker ce docker io y 确保卸载干净 wget qO https get docker com s
  • vins-mobile

    最近项目需求 xff0c 需要在新版ios设备上面配置vins mobile xff0c 但是vins mobile采用oc代码 xff0c 需要将其迁移到swift vins对时间戳要求比较严格 xff0c 原版修改了opencv源码 x
  • ROS入门之话题消息的定义与使用

    1 定义msg文件 xff1a 在catkin ws src learning topic文件下新建msg文件夹并在文件夹下新建Person msg文件 msg文件中代码如下 xff1a string name uint8 sex uint
  • git为什么会有冲突

    看了百度很多回答 xff0c 觉得和实操有点出入 xff0c 记录一下个人理解 结论 xff1a 冲突的产生就是各分支修改的文件版本不一致 xff08 远程冲突同理 xff09 例 xff1a 分支 m 和分支 d 都有一个相同文件 61
  • 视觉SLAM十四讲:运动方程

    SLAM xff1a 同时定位和建图 xff08 Simultaneous Localization and Mapping xff09 希望机器人从未知环境的未知地点出发 xff0c 在运动过程中通过重复观测到的地图特征 xff08 比如
  • NeRF简介及nerf-pytorch的使用

    NeRF全称为Neural Radiance Field 神经辐射场 是2020年发表的论文 xff0c 论文名字为 NeRF Representing Scenes as Neural Radiance Fields for View S
  • SLAM如何定位与建图

    SLAM xff1a 同时定位和建图 xff08 Simultaneous Localization and Mapping xff09 机器人从未知环境中的未知地点出发 xff0c 在运动过程中通过重复观测到的地图特征 xff08 比如
  • OpenMV——串口通信+发送中心位置

    串口通信 OpenMV本质还是一个单片机 xff0c 可以通过调用pyb中的UART使用串口通信 xff0c 注意发送的数据类型为字符串 xff0c 可以通过json dumps 进行字符串转换 span class token keywo
  • liunx下rpm包mysql安装脚本

    目录 文章目录 前言 一 mysqlshell安装脚本 二 xff0c mysql 配置文件 前言 liunx下mysql安装脚本shell脚本 采用的版本时 mysql 5 7 28 xff0c rpm安装方式 shell安装脚本 xff
  • setTimeout与setInterval的坑以及优缺点

    转自 xff1a setTimeout与setInterval的坑以及优缺点 找寻的千寻 博客园 setInterval和setTimeout的缺陷和优势分析 F ZERO F的博客 CSDN博客 settimeout缺点 说到setTim
  • 登录功能app端的建立与实现

    选择使用Android文件的一些主要包装命名搭建 1 Layout存放布局界面的地方 xff0c values是存放图片和颜色 字体等 2 manifests体现层 61 61 代码 3 执行界面打开 lt application lt 登
  • 麻将胡牌算法(遍历+剪枝)

    麻将胡牌算法 xff08 遍历 43 剪枝 xff09 简介麻将胡牌算法及代码1 方法引入2 类型定义2 1 牌定义2 2 牌特征定义 3 计算胡牌3 1 检测十三幺牌型3 2 检测七小对牌型3 3 检测普通牌型胡牌3 3 1 检测所有可能
  • 接口报错Missing grant type

    错误详情 xff1a 原因 xff1a 缺少表单参数 xff1a grant type 但如果传递了该参数依旧报错则说明传递的数据格式有误 xff0c 需要修改数据格式 解决方式 xff1a 第一步 xff1a 设置数据格式 Content
  • 如何关闭vue-element-admin中的格式化校验

    1 找到根目录下的 eslintignore文件 xff0c 如下 xff1a 2 将该文件内的内容全部替换为 xff0c 如图所示 xff1a 3 删除node modules和package lock json文件 xff0c 重新运行
  • D435i问题及解决

    提问连接 https support intelrealsense com hc en us requests new 1 使用realsense viewer时 xff0c 如果在3D模式下观看 xff0c 需要打开stereo modu
  • ubuntu磁盘空间不足解决办法

    df h后发现 目录下空间很少 点击左下角 搜索disk 点击 disk usage 看各个目录下占用的空间 xff0c 删除空间 2 在ubuntu 使用Windows的磁盘空间 发现 media liao 软件 下还有空间 xff0c
  • instant-ngp简介及NeRF的使用

    英伟达实验室开源的instant ngp全称为Instant Neural Graphics Primitives xff0c 源码地址为https github com NVlabs instant ngp xff0c 可用于快速的训练N
  • Bad owner or permissions on /home/cxhpc/.ssh/config

    实测解决方案 xff1a 进入 home cxhpc ssh sudo chmod 600 config
  • D3.js学习指北--第三章应用,冒泡排序的可视化

    D3学习指北 第三章应用 xff0c 冒泡排序的可视化 前言 本章前面已经讲了D3选择操作 xff0c 以及选择后返回的选择集的操作 那么我们应用一下 xff0c 利用d3 js写一个冒泡排序的可视化 首先第一步 xff1a 分析需求 一个