d3.js 小结

2023-11-09

D3:数据可视化库(D3 4.0+)

  D3是目前最流行的JavaScript可视化图表库之一,D3的图表类型非常丰富,并且支持SVG格式,因此应用十分广泛,也有很多图表插件基于D3开发,比如MetricsGraphics.js,在D3上构建的数据图表非常强大。

    // 引用D3对象
    // select()方法返回一个对DOM中匹配的第一个元素的引用
    d3.select("body")
      // append()会创建一个新的DOM元素,然后把它追加到调用它的元素末尾
      .append("p")
      // text()接受一个字符串,把它插入到当前元素的开始和结束标签之间
      .text("New paragraph!")
    d3.select("body")
      // 选择DOM中的所以段落。没有段落时,返回空元素
      .selectAll("p")
      // 解析并输出数据值
      .data(dataset)
      // 创建新的绑定数据的元素(占位元素)
      .enter()
      .append("p")
      .text("New paragraph");

数据

加载CSV数据

    d3.csv("xxx.csv", function(error, data){
        if (error) {
            console.log(error);
        } else {
            // 把CSV数据交给全局变量
            dataset = data;
            // 调用生成可视化图标的其他函数
            generateVis();
            hideLoadingMsg();
        }
    })

加载JSON数据

   d3.json("waterfallvelocities.json", function(json){
        console.log(json);
        // todo json data
   }) 

SVG

    // 创建SVG元素
    var w = 500, h = 70;
    var svg = d3.select("body")
                .append("svg")
                .attr("width", w)
                .attr("height", h);
    var dataset = [5, 10, 15, 20, 25];

    // 创建圆形
    var circles = svg.selectAll("circle")
                     .data(dataset)
                     .enter()
                     .append("circle");
    // i为从0开始的整数,d为dataset[i]
    circles.attr("cx", function(d, i){
                   return (i * 50) + 25;
               })
            .attr("cy", h/2)
            .attr("r", function(d){
                   return d;
               })
            // 填充
            .attr("fill", "yellow")
            // 描边
            .attr("stroke", "orange")
            .attr("stroke-width", function(d){
                   return d/2;
               });

    这里写图片描述

条形图

    <script>
        var w = 500, h = 100, barpadding = 1;
        var dataset = [ 15, 20, 13, 15, 17, 19, 60, 55, 34, 19, 57, 99, 55, 61, 77, 64, 81, 56, 33, 24 ];
        var svg = d3.select("body").append("svg").attr("width", w).attr("height", h);
        // 创建矩形
        svg.selectAll("rect").data(dataset).enter().append("rect")
            .attr("x", function(d, i){
                return i * (w / dataset.length);
            }).attr("y", function(d){
                return h - d;
            }).attr("width", w / dataset.length - barpadding).attr("height", 100)
            .attr("fill", function(d){
                return "rgb(0, 0, " + (d * 10) + ")";
            });
        // 值标签
        svg.selectAll("text").data(dataset).enter().append("text")
            .text(function(d){ return d; })
            .attr("x", function(d, i){
                return i * (w / dataset.length) + 11;
            })
            .attr("y", function(d){
                return (h-d) + (h-(h-d))/2 + 2;
            })
            .attr("font-family", "sans-serif")
            .attr("font-size", "11px")
            .attr("fill", "white")
            // 水平居中文本
            .attr("text-anchor", "middle");
    </script>

这里写图片描述

比例尺和数轴

创建通用的数轴函数

原写法:

    var xAxis = d3.svg.axis();
    xAxis.scale(xScale);
    xAxis.orient(bottom);

最新写法

    var xAxis = d3.axisBottom().scale(xScale);
    var yAxis = d3.axisLeft()
                  .scale(yScale);

创建线性比例尺

原写法:

    var xScale = d3.scale.linear().domain([0, 100]).range(0, 10);

最新写法:

   var xScale = d3.scaleLinear().domain([0, 100]).range(0, 10);

散点图示例

            .axis path,
            .axis line {
                fill: none;
                stroke: black;
                shape-rendering: crispEdges;
            }

            .axis text {
                font-family: sans-serif;
                font-size: 11px;
            }
    //Width and height
    var w = 500;
    var h = 300;
    var padding = 30;

    //Dynamic, random dataset
    var dataset = [];  //Initialize empty array
    var numDataPoints = 50; //Number of dummy data points to create
    var xRange = Math.random() * 1000; //Max range of new x values
    var yRange = Math.random() * 1000; //Max range of new y values
    for (var i = 0; i < numDataPoints; i++) {
        //Loop numDataPoints times
        var newNumber1 = Math.floor(Math.random() * xRange); 
        var newNumber2 = Math.floor(Math.random() * yRange);    
        dataset.push([newNumber1,newNumber2]);                          
    }
    //Create scale functions
    var xScale = d3.scaleLinear()
                         .domain([0, d3.max(dataset, function(d) { return d[0]; })])
                         .range([padding, w - padding * 2]);
    var yScale = d3.scaleLinear()
                         .domain([0, d3.max(dataset, function(d) { return d[1]; })])
                         .range([h - padding, padding]);
    var rScale = d3.scaleLinear()
                         .domain([0, d3.max(dataset, function(d) { return d[1]; })])
                         .range([2, 5]);
    //Define X axis
    var xAxis = d3.axisBottom()
                    .scale(xScale)
                    .ticks(5);
    //Define Y axis
    var yAxis = d3.axisLeft()
                  .scale(yScale)
                  .ticks(5);
    //Create SVG element
    var svg = d3.select("body")
                .append("svg")
                .attr("width", w)
                .attr("height", h);
    //Create circles
    svg.selectAll("circle")
       .data(dataset)
       .enter()
       .append("circle")
       .attr("cx", function(d) {
               return xScale(d[0]);
       })
       .attr("cy", function(d) {
               return yScale(d[1]);
       })
       .attr("r", function(d) {
               return rScale(d[1]);
       });
   //Create labels
   svg.selectAll("text")
      .data(dataset)
      .enter()
      .append("text")
      .text(function(d) {
              return d[0] + "," + d[1];
      })
      .attr("x", function(d) {
              return xScale(d[0]);
      })
      .attr("y", function(d) {
              return yScale(d[1]);
      })
      .attr("font-family", "sans-serif")
      .attr("font-size", "11px")
      .attr("fill", "red");

   //Create X axis
   svg.append("g")
       .attr("class", "axis")
       .attr("transform", "translate(0," + (h - padding) + ")")
       .call(xAxis);

   //Create Y axis
   svg.append("g")
       .attr("class", "axis")
       .attr("transform", "translate(" + padding + ",0)")
       .call(yAxis);

这里写图片描述

更新,过渡和动画

交互式图表

布局

地图

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

d3.js 小结 的相关文章

  • 当节点扩展时增加d3中的连接链路长度

    我正在 d3 中研究可折叠力布局 我面临的问题是 当单击节点时 我需要增加节点之间链接的长度 以保持子节点之间的链接距离相同 当分析扩展时 如何增加分析和耀斑之间的距离 保持与子级的距离较小 是的 您可以通过定义一个函数来做到这一点力 链接
  • d3.select 不适用于特殊字符

    我正在使用 d3 js 处理简单的图表 假设下面的 div 是我计划放置 d3 的 svg 容器的地方 div 但是当我使用 d3 select my div chart 我无法选择特定的 div 但是通过使用 java 脚本选择器 它可以
  • 寻找一种重构 D3.js 风格的方法链接模式的方法

    在学习 D3 js 时 我遇到了博客文章 http bost ocks org mike chart 解释其可重用代码单元背后的主要设计模式 我复制了下面的相关代码 下面呈现的模式的方式正是在 D3 代码库和插件中使用的方式 example
  • NVD3/D3改变y轴最小值

    我目前正在使用 NVD3 制作一些折线图 我想知道是否可以使 y 轴刻度始终从 0 开始 目前它始终从最低的 y 值开始 我尝试过使用tickValues 但我不想更改其他值 我还尝试添加值为 0 的数据点 但这似乎是一种解决方法 它会影响
  • 如何使用 d3.v4 中的 JSON 数据创建树布局 - 不使用 stratify()

    我正在尝试将一些 d3 代码从 v3 更新到版本 4 我有一个使用 JSON 数据的树形图 d3 v4 示例展示了如何使用 stratify 将表格数据 例如flare csv 转换为分层数据https bl ocks org mbosto
  • D3:如何在Groups of Force布局节点上绘制多个凸包?

    我试图在力布局中的所有组上绘制凸包 但我只画出了一半的凸包 当 D3 尝试绘制其余的船体时 控制台返回错误 元素尚未创建 然而 当我检查控制台中的 groups 变量时 所有组数据都在那里 x y 数据都设置得很好 见下图 我什至尝试在ti
  • 如何使用 D3 (或只是 javascript)将表单选项设置为“选择”

    有没有一种方法可以搜索选择表单元素中的所有选项 并将具有匹配值的选项指定为 已选择 var xStat G var statOptions Points PTS Goals G Assists A Penalty Minutes PIM c
  • 将元素添加到 D3 圆包节点

    我正在尝试制作一个可缩放的圆形包装图 我希望每个子圆圈包含一个较小的图表 该图表始终具有相同的结构 即 4 列 只有条形的高度会改变 我尝试添加一个简单的rect到目前为止我的图表 但矩形没有添加到圆圈中并且是静态的 JS var marg
  • D3.js分组条形图

    I am making a bar chart using D3 js like this source statcan gc ca http www statcan gc ca pub 12 593 x 2007001 figures f
  • 将任何 D3.js 图表与 DC.js 集成

    我试图弄清楚如何轻松地将任何 D3 js 图表与 DC js 库集成 以便在所有图表之间使用交叉过滤功能 我也确实理解以前曾问过这种性质的问题 添加链接以供参考 DC js 监听图表组渲染 https stackoverflow com q
  • 在 D3 中在外部加载的 svg 图形上绘图

    我已经从 svg 文件加载了外部图形 我想尝试在其上绘图 但不知道如何操作 我的简单 d3 代码在这里
  • d3.js 更新视觉效果

    我有一个与 d3 js 放在一起的树形图 我通过 getJSON 填充数据 效果很好 但是 我在 setInterval 方法中具有此功能 并且它似乎并没有刷新自身 var treemap d3 layout treemap padding
  • D3.js - 具有多个环的圆环图

    以下示例显示了 D3 js 中的圆环图 是否可以向图表添加多个圆环 var dataset apples 53245 28479 19697 24037 40245 var width 460 height 300 radius Math
  • 需要帮助绘制多元线之间的区域 - 而不是从轴到线

    我是 d3 js 的新手 我正在努力填充多元百分位数图中线条之间的区域 我不希望在最底线下方或最顶线上方填充任何区域 第一列始终位于图表的底部 第 5 个百分位 最后一列将始终位于图表的顶部 第 95 个百分位 我需要每条线之间单独的区域段
  • 使用 CSS Grid,从任何地方滚动 div(不使用 jQuery 插件)

    div 怎样才能 scroll content https jsfiddle net blehmanade x1k3rhj7 33 可以从页面上的任何位置滚动吗 现在 scroll content仅当鼠标位于其上方时才可滚动 但是 当鼠标位
  • 如何将此数据编码为 JSON 中的父/子结构

    我正在使用 d3 js 将动物 有机体 家族 一次最多 4000 个 可视化为树形图 尽管数据源也可以是目录列表或命名空间对象列表 我的数据如下 json organisms name Hemiptera Miridae Kanakamir
  • 需要js、d3 和 nvd3 集成

    我面临整合的问题要求 questions tagged requirejs with d3 questions tagged d3 and nvd3 questions tagged nvd3 我找到了一个使用 require 的简单解决方
  • 如何在 SVG 元素上使用箭头标记?

    我需要在 d3 js 中创建一个箭头 但我找到的只是带有节点图的示例 我需要的是简单地制作一个从 A 点到 B 点的箭头 我尝试实现以下示例中的部分代码 http bl ocks org 1153292 http bl ocks org 1
  • d3 仅限整数刻度线

    我有一个 d3 条形图 其值范围为 0 3 我希望 y 轴仅显示整数值 我可以这样做 var yAxis d3 svg axis scale y orient right tickFormat d3 format d 但是 非整数标记处仍然
  • 平移/缩放顺序尺度?

    我正在使用 d3 渲染简化的甘特图 并使用 d3 behavior zoom 进行平移和缩放 x 刻度是一个时间刻度 稍微修改为列中的中心日历日等 并且工作得很好 但是我在决定如何缩放 平移 y 刻度时遇到问题 其域是通常会出现的任务列表图

随机推荐

  • 【手写一个Tomcat】SimpleTomcat-01

    目录 前言 实现 http TomcatRequest http TomcatResponse http TomcatServlet SimpleTomcat servlet FirstServlet servlet SecondServl
  • 常用数据库validationQuery检查语句

    validationQuery是用来验证数据库连接的查询语句 这个查询语句必须是至少返回一条结果的SELECT语句 每种数据库都有各自的验证语句 下表中从网上收集了几种常见数据库的validationQuery 数据库 validation
  • 搭建服务注册与发现中心

    使 Spring Cloud Netflix 中的 Eureka 搭建服务注册与发现中 创建SpringBoot应 添加依赖 spring web eureka server 配置服务注册与发现中心 设置服务注册与发现中 的端 server
  • 数据挖掘应用实例_手把手教你做数据挖掘 !(附教程&数据源)

    作者 宋莹 本文长度为10427字 建议阅读20 分钟 本文为你介绍数据挖掘的知识及应用 引言最近笔者学到了一个新词 叫做 认知折叠 就是将复杂的事物包装成最简单的样子 让大家不用关心里面的细节就能方便使用 作为数据科学领域从业者 我们所做
  • 行业首发!《硬件工程师进阶武器库》免费赠送!限量2000份,送完不补!

    对于刚入硬件行业的3 5年工程师来说 如果能有一个好的师傅引路 那是最好不过的了 但是往往大神很少 能够愿意倾囊相授的也难遇到 如果在这个阶段 能够找到行业中top级企业内部的学习资料 或者高阶的技能图谱 或者行业大神的学习教程等等 就能够
  • Unity Koreographer 之 音乐制作插件介绍学习,一般使用步骤介绍(包括:一般音乐游戏制作流程简绍) 一

    Unity Koreographer 之 音乐制作插件介绍学习 一般使用步骤 介绍 一 目录 Unity Koreographer 之 音乐制作插件介绍学习 一般使用步骤 一 一 Koreographer 简单介绍 二 Koreograph
  • 例说数据结构&STL(一)——vector

    1 白话vector 向量 数据结构vector又称为动态数组 因为它无需像普通数组定义的时候规定具体空间大小 一定程度上可以节约内存空间 但是它又具有普通数组连续物理内存存储的优势 即各元素之间构成一个线性的前后次序 数据的物理存储位置与
  • Java中继承详解

    为什么要继承 面相对象思想中提出了继承的概念 专门用来进行共性抽取 实现代码复用 继承概念 子类将父类的一些属性与方法继承过来 然后自己再添加一些新的特性 继承的语法 1 在Java中如果要表示类之间的继承关系 需要借助extends关键字
  • 内存函数的介绍

    前言 本博客向大家介绍四个内存函数 memcpy 内存拷贝 memmove 内存移动 memcmp 内存比较 memset 内存设置 memcpy函数的介绍及其应用 num表示要拷贝几个字节 遇到 0 他并不会停下来 如果destinati
  • 图像处理(二十一)基于数据驱动的人脸卡通动画生成-Siggraph Asia 2014

    基于数据驱动的人脸卡通动画生成 原文地址 http blog csdn net hjimce article details 47083321 作者 hjimce 在现实生活中 我们经常会去评价一个人 长得是否漂亮 是不是帅哥美女 然而如何
  • 牛客10道练习题2--练习记录

    原题 牛客10道练习题2 meiribaofu的博客 CSDN博客 1 快递运输 一辆运送快递的货车 运送的快递均放在大小不等的长方体快递盒中 为了能够装载更多的快递 同时不能让货车超载 需要计算最多能装多少个快递 输入描述 第一行输入每个
  • 【华为OD机试】寻找身高相近的小朋友(C++ Python Java)2023 B卷

    时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 题目描述 小明今年升学到小学一年级 来到新班级后发现其他小朋友们身高参差不齐 然后就想基于各小朋友和自
  • WSL使用史上最详细教程

    文章目录 1 概述 1 1 什么是适用于 Linux 的 Windows 子系统 1 2 什么是 WSL 2 1 3 WSL 2 中的新增功能 1 4 比较 WSL 2 和 WSL 1 1 4 1 比较功能 1 4 2 使用 Linux 文
  • 出现No module named ‘keras‘ 或者 module ‘xxxxxxx’ has no attribute ‘xxx’ 的问题原因和解决方案

    问题一 当导入keras工具包时出现 No module named keras 出现这个问题时 说明你的python语言库中并没有安装这个工具包 打开cmd 然后输入命令pip install keras就可以了 然后在python环境中
  • React-Native画线平滑处理

    参考 http blog csdn net pz789as article details 52795275 这次开发要手写画线 我们一般画线的时候是直接获取屏幕上的点 然后利用ART绘制出一天路径线 Sample React Native
  • 蓝桥杯 2019 JAVA A组 最大降雨量

    题目 试题四 最大降雨量 问题描述 由于沙之国长年干旱 法师小明准备施展自己的一个神秘法术来求雨 这个法术需要用到他手中的49张法术符 上面分别写着1至49这49个数字 法术一共持续7周 每天小明都要使用一张法术符 法术符不能重复使用 每周
  • Psins代码解析之全局变量&轨迹仿真(test_SINS_trj.m)&惯性解算(test_SINS.m)

    旋转椭球体的4个基本参数 长半轴 扁率 椭圆度 地心引力常数 自转角速率 以上内容来自 车载定位定向系统关键技术研究 付强文 旋转椭球体 地球自转角速度 地球重力加速度为 子午圈和卯酉圈曲率半径为 以上内容来自 捷联惯导算法及车载组合导航系
  • 梯度下降法求解方程的极值

    1 方法一 利用梯度下降算法求解y x 2的极值 注意 此种方法 除了x的更新之外 还有一点需要注意 那就迭代停止的条件 可以设置一个阈值a 比较x更新前后的y的差的绝对值与阈值a的大小 即 y与a的大小 当 y a时 停止迭代 impor
  • 设置熄屏_手机摁下这个开关,熄屏也能显示时间!很多人没用过,太可惜了

    其实在手机的使用过程中 很多实用功能都被大家忽略掉了 如手机熄屏显示时间这个功能 在日常生活中就十分的实用 但是很多人都没用过 这就很可惜了 下面我们就一起来看一下吧 1 华为手机 华为手机也是支持手机熄屏显示时间的 下面我们就一起来看一下
  • d3.js 小结

    D3 数据可视化库 D3 4 0 D3是目前最流行的JavaScript可视化图表库之一 D3的图表类型非常丰富 并且支持SVG格式 因此应用十分广泛 也有很多图表插件基于D3开发 比如MetricsGraphics js 在D3上构建的数