首页 > 其他分享 >前端数据可视化:利用D3.js创建动态图表

前端数据可视化:利用D3.js创建动态图表

时间:2023-09-07 16:33:00浏览次数:118  
标签:function attr d3 sales js 柱状图 可视化 D3

前言

数据可视化是将数据以图表、图形等形式展示出来,以便更直观地理解和分析数据。D3.js(Data-Driven Documents)是一个强大的JavaScript库,用于创建交互式和动态的数据可视化。

本文将介绍如何使用D3.js创建动态图表,并通过一个具体的示例来说明。

示例:柱状图

我们以柱状图为例,展示一个公司每个季度的销售额数据。

准备工作

首先,我们需要准备一些数据。假设我们有以下销售额数据:

var salesData = [
  { quarter: "Q1", sales: 100 },
  { quarter: "Q2", sales: 200 },
  { quarter: "Q3", sales: 150 },
  { quarter: "Q4", sales: 300 }
];

创建SVG容器

我们首先需要创建一个SVG容器,用于放置我们的图表。在HTML中添加一个空的<svg>元素:

<svg id="chart"></svg>

然后,在JavaScript中获取该元素,并设置其宽度和高度:

var svg = d3.select("#chart")
  .attr("width", 400)
  .attr("height", 300);

创建柱状图

接下来,我们使用D3.js创建柱状图。首先,我们需要定义一个比例尺,将销售额映射到柱状图的高度范围内:

var yScale = d3.scaleLinear()
  .domain([0, d3.max(salesData, function(d) { return d.sales; })])
  .range([0, 200]);

然后,我们使用D3.js的selectAlldata方法,将数据绑定到柱状图的矩形元素上:

var bars = svg.selectAll("rect")
  .data(salesData);

接着,我们使用D3.js的enter方法,创建新的矩形元素,并设置其位置和大小:

bars.enter()
  .append("rect")
  .attr("x", function(d, i) { return i * 80; })
  .attr("y", function(d) { return 200 - yScale(d.sales); })
  .attr("width", 40)
  .attr("height", function(d) { return yScale(d.sales); })
  .attr("fill", "steelblue");

最后,我们可以为柱状图添加一些动态效果,比如在鼠标悬停时改变颜色:

bars.on("mouseover", function() {
  d3.select(this).attr("fill", "orange");
})
.on("mouseout", function() {
  d3.select(this).attr("fill", "steelblue");
});

完整代码

下面是完整的HTML和JavaScript代码:

<!DOCTYPE html>
<html>
<head>
  <title>柱状图示例</title>
  <script src="https://d3js.org/d3.v5.min.js"></script>
</head>
<body>
  <svg id="chart"></svg>

  <script>
    var salesData = [
      { quarter: "Q1", sales: 100 },
      { quarter: "Q2", sales: 200 },
      { quarter: "Q3", sales: 150 },
      { quarter: "Q4", sales: 300 }
    ];

    var svg = d3.select("#chart")
      .attr("width", 400)
      .attr("height", 300);

    var yScale = d3.scaleLinear()
      .domain([0, d3.max(salesData, function(d) { return d.sales; })])
      .range([0, 200]);

    var bars = svg.selectAll("rect")
      .data(salesData);

    bars.enter()
      .append("rect")
      .attr("x", function(d, i) { return i * 80; })
      .attr("y", function(d) { return 200 - yScale(d.sales); })
      .attr("width", 40)
      .attr("height", function(d) { return yScale(d.sales); })
      .attr("fill", "steelblue")
      .on("mouseover", function() {
        d3.select(this).attr("fill", "orange");
      })
      .on("mouseout", function() {
        d3.select(this).attr("fill", "steelblue");
      });
  </script>
</body>
</html>

总结

通过使用D3.js,我们可以轻松地创建动态图表,使数据更加直观和易于理解。在本文中,我们以柱状图为例,展示了如何使用D3.js创建动态图表,并通过代码示例进行了说明。

希望本文能帮助你更好地理解和应用D3.js进行前端数据可视化。

标签:function,attr,d3,sales,js,柱状图,可视化,D3
From: https://blog.51cto.com/u_15718546/7398593

相关文章

  • 用友U8 OA test.jsp SQL注入漏洞
    漏洞描述用友U8OAtest.jsp文件存在SQL注入漏洞,由于与致远OA使用相同的文件,于是存在了同样的漏洞漏洞影响用友U8OA漏洞复现fofa语法:title="用友U8-OA"登录页面如下:POC/yyoa/common/js/menu/test.jsp?doType=101&S1=(SELECT%20md5(1))出现上图说明目标存在sql注入......
  • 8天长假快来了,Python分析【去哪儿旅游攻略】数据,制作可视化图表
    目录前言环境使用模块使用数据来源分析代码实现导入模块请求数据解析保存数据可视化导入模块、数据年份分布情况月份分布情况出行时间情况费用分布情况人员分布情况前言2023年的中秋节和国庆节即将来临,好消息是,它们将连休8天!这个长假为许多人提供了绝佳的休闲机会,让许多人都迫不......
  • Lnton羚通AI算法算力平台在海域可视化监管海域动态远程视频智能监管平台的构建方案
    一、方案背景随着科技的不断进步,智慧海域管理平台已成为海洋领域监管的关键工具。相比传统的视频监控方式,智慧海域管理平台通过建设近岸海域视频监控网、海洋环境监测网和海上目标探测网络等,实现了海洋管理的数字化转型。传统的监控方式需要大量人力物力,而智慧海域管理平台实现了......
  • 【ROS2机器人入门到实战】可视化点云-雷达消息合成
    5.可视化点云-雷达消息合成写在前面当前平台文章汇总地址:ROS2机器人从入门到实战获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取教程配套机器人开发平台:两驱版|四驱版为方便交流,搭建了机器人技术问答社区:地址fishros.org.cn你好,我是爱吃鱼香ROS的小鱼。上一节完成了指定角......
  • sql与js中单引号问题
    1、展现树在构建xml字符串时/***解决当输入值中含有单引号或双引号导致树的展现报js脚本错误*@paramvalue*@return*/privatestaticStringgetFormatString(Stringvalue){returnvalue.replaceAll("/'","'").replaceAll("/"",""&qu......
  • 下拉列表select动态初始化 (JSP页面)
    HTML代码:<td><selectid="as_occt"name="as_occt"><optionselected="selected"value="">智能模糊搜索</option><optionvalue="content">仅搜索内容</option><o......
  • JS去掉空格
    去掉字符串中的所有空格,不仅仅包含前后空格:text=text.replace(//s/ig,'');去掉前后空格:第一种方法:使用trim()functionTrim(m){while((m.length>0)&&(m.charAt(0)==''))m=m.substring(1,m.length);while((m.length>0)&&(m.c......
  • Windows完全删除node.js
    目录Windows完全删除node.js附:node.js重新安装总结Windows完全删除node.js1、输入cmd命令:npmcacheclean--force (如果还没开始删除的话)2、从“控制面板”的“卸载程序”界面中卸载node程序。3、重新启动(或者您可能会从任务管理器中杀死所有与节点相关的进程)。4、寻找这些文件夹......
  • 浅述视频监控平台EasyCVR监控汇聚平台可视化安全管理在生产工作中的重要性
    EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,视频云存储/安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流,也能支持视频定时轮播。视频监控汇聚平台EasyCVR支持多种播放协议,包括:HLS、HTTP-FLV、WebSocket-......
  • Panel采用autoLoad载入页面如何传参更新页面——EXTJS2.2.1
    //右侧flash图片浏览panelvarflash_pic_panel=newExt.Panel({id:'flash_pic_panel',animate:true,border:false,items:[{autoLoad:{//参数说明-NoDecorate:url拦截中用于标识此请求返回的页面不需装饰url:requestCont......