当前位置: 首页 > 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的原理及其使用。

相关文章:

  • 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集合
  • “世界茶树原产地”打通全产业链,茶文旅融合助力西双版纳高质量发展
  • 北斗专访|星纪魅族郭鹏:AR眼镜正迈入行业发展“破局之年”
  • 中方是否支持或参加俄乌谈判?外交部:支持一切有利于和平的努力
  • 2025年新季夏粮收购量将达到2000亿斤左右
  • 习近平在河南洛阳市考察调研
  • 中国田径巡回赛西安站完赛:男子跳远石雨豪夺冠,女子跳高刘肼毅折桂