当前位置: 首页 > news >正文

01-通过纯js理解数据驱动图表概念

现有1组一维数组数据:

const data = [720, 320, 531, 120, 230, 387, 258]

通过forEach循环该data,根据数据值,循环出对应长度的 rect 标签,计算好横纵坐标的位置,并在最后将各个 rect标签 append 到 svg 标签中。如图所示,在浏览器中的坐标原点在左上角,向右为x轴正方向,向下为y轴正方向,由于不需要考虑y轴的反向计算,横向柱图的生成会比竖向柱图的生成更加简单。

竖向柱图的生成思路如下: 

data.forEach((d, i) => {const rectTag = document.createElementNS('http://www.w3.org/2000/svg', 'rect')rectTag.setAttribute('x', (i * (barWidth + barPad)))rectTag.setAttribute('y', (maxHeight - d / maxValue * maxHeight) + 24)rectTag.setAttribute('width', barWidth)rectTag.setAttribute('height', (d / maxValue * maxHeight))todaySvg.append(rectTag)
})

【完整代码】

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><main><h1>Chart</h1><svg width="900" height="200"></svg></main><script text="script">const data = [720, 320, 531, 120, 230, 387, 258]const todaySvg = document.querySelector('svg')const barWidth = 24const barPad = 12const maxHeight = 112const maxValue = Math.max(...data)data.forEach((d, i) => {const rectTag = document.createElementNS('http://www.w3.org/2000/svg', 'rect')rectTag.setAttribute('x', (i * (barWidth + barPad)))rectTag.setAttribute('y', (maxHeight - d / maxValue * maxHeight) + 24)rectTag.setAttribute('width', barWidth)rectTag.setAttribute('height', (d / maxValue * maxHeight))todaySvg.append(rectTag)})</script></body></html>

【注】先理解好如何通过数组的forEach来生成不同的svg元素(将图表的思路重心放在data上),能够更好地理解D3.js的原理及其使用。

http://www.dtcms.com/a/202135.html

相关文章:

  • DeepSeek提示工程Prompt Engineering
  • 服务器操作系统时间同步失败的原因及修复
  • AI大模型从0到1记录学习 大模型技术之数学基础 day26
  • Github 2025-05-20Python开源项目日报 Top9
  • FineBI 和 Axure工具比较——数据分析VS原型设计
  • Wan2.1 通过首尾帧生成视频
  • 高效选课系统:一键管理你的课程表
  • 全局对比度调整
  • 开疆智能Profinet转ModbusTCP网关连接BORUNTE伯朗特系统配置案例
  • 目标检测DN-DETR(2022)详细解读
  • 湖北理元理律师事务所:科学债务规划如何平衡还款与生活
  • 健康养生指南:科学生活,活力常驻
  • 【生活tips】保存系统随机的壁纸
  • 使用亮数据代理IP+Python爬虫批量爬取招聘信息训练面试类AI智能体(附完整源码)
  • 鸿蒙应用开发:应用运行到设备报错,可能是版本问题,可通过hdc查询设备API版本
  • 101个α因子#6
  • 从零开始:Python语言基础之变量
  • Facebook隐私保护的成与败:一场对用户信任的考验
  • CentOS系统上挂载磁盘
  • Java 08集合
  • CSS 样式表的四种应用方式详解以及css注释的应用
  • 【开源】一个基于 Vue3 和 Electron 开发的第三方网易云音乐客户端,具有与官方客户端相似的界面布局
  • Spring Boot 多参数统一加解密方案详解:从原理到实战
  • HTB AD域渗透Skills Assessment Part I复现
  • Linux | 开机自启动设置多场景实现
  • 深入解析 OpenManus:开源 AI 智能体框架的技术原理与实践
  • 智能事件分析边缘服务器:交通管理与安全监测的利器
  • IEEE PRMVAI 2025新论坛: 人工智能+雷达信号处理
  • python学习打卡day31
  • PostgreSQL简单使用