【SVG】从零开始绘制条形图

news2024/11/26 20:25:09

效果图

在这里插入图片描述

定义背景色和坐标轴颜色

 :root {
   	--cord-color: #2be7ca;
}
 body {
     background-color: #000;
 }

画坐标轴

画X轴
<!-- 坐标轴 -->
<g id="cordinate">
     <!-- x轴 -->
     <line x1="50" y1="600" x2="900" y2="600" stroke="var(--cord-color)" stroke-width="2" />" stroke-width="1"></line>
     <path d="M 900,580 L 925,600 L 900,620" fill="var(--cord-color)" stroke="var(--cord-color)" stroke-width="1"></path>
     <text x="20" y="40" fill="var(--cord-color)">订单量</text>
 </g>
画Y轴
<!-- y轴 -->
 <line x1="100" y1="650" x2="100" y2="50" stroke="var(--cord-color)" stroke-width="1"></line>
 <path d="M 80,50 L 100,25 L 120,50" fill="var(--cord-color)" stroke="var(--cord-color)" stroke-width="1"></path>
 <text x="900" y="650" fill="var(--cord-color)">时间</text>

画刻度

首先定义假数据

const data = [
    {
        time: "星期一",
        orders: 1000
    },
    {
        time: "星期二",
        orders: 500
    },
    {
        time: "星期三",
        orders: 800
    },
    {
        time: "星期四",
        orders: 100
    },
    {
        time: "星期五",
        orders: 1000
    },
    {
        time: "星期六",
        orders: 400
    },
    {
        time: "星期日",
        orders: 800
    }
]
画X轴刻度
<!-- x轴刻度 -->
<g id="xkedu"></g>

使用JavaScript来渲染

// 计算x轴刻度及条形图
const xjgLength = 700 / data.length;
const xkedu = document.getElementById("xkedu");
for (let i = 1; i <= data.length; i++) {
   render(100 + i * xjgLength, i)
}
// 绘制x轴刻度
const render = (posX, index) => {
     const lineDom = document.createElement("line");
     lineDom.setAttribute("stroke", "var(--cord-color)");
     lineDom.setAttribute("stroke-width", "1");
     lineDom.setAttribute("x1", posX);
     lineDom.setAttribute("y1", "600");
     lineDom.setAttribute("x2", posX);
     lineDom.setAttribute("y2", "580");
     xkedu.innerHTML += lineDom.outerHTML
     xkedu.innerHTML += `<text x="${posX - 20}" y="640" fill="var(--cord-color)">${data[index - 1].time}</text>` 
 }
画Y轴刻度
<!-- y轴刻度 -->
<g id="ykedu"></g>

渲染

const ykedu = document.getElementById("ykedu");
const yjgLength = 350 / data.length;
for (let i = 1; i <= 10; i++) {
    renderYKedu(600 - i * yjgLength, i)
}
// 绘制y轴刻度
const renderYKedu = (posY, num) => {
   const lineDom = document.createElement("line");
    lineDom.setAttribute("stroke", "var(--cord-color)");
    lineDom.setAttribute("stroke-width", "1");            
    lineDom.setAttribute("x1", "100");
    lineDom.setAttribute("y1", posY);
    lineDom.setAttribute("x2", "80");
    lineDom.setAttribute("y2", posY);
    ykedu.innerHTML += lineDom.outerHTML
    ykedu.innerHTML += `<text x="40" y="${posY + 5}" fill="var(--cord-color)">${100 * num}</text>`
}

绘制条形图

这里,我们可以直接在绘制x轴刻度的同时绘制条形图

<!-- 条形图 -->
<g id="barList"></g>
const barList = document.getElementById("barList");
const render = (posX, index) => {
   // 绘制条形图
   const color = `rgb(${parseInt(Math.random() * 255)}, ${parseInt(Math.random() * 255)}, ${parseInt(Math.random() * 255)})`
   barList.innerHTML += `<rect x="${posX - 25}" y="${600 - data[index - 1].orders / 2}" width="50" height="${data[index - 1].orders / 2}" fill="${color}"></rect>`
}

完结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1604228.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

博弈论和sg函数

Nim游戏 题目链接&#xff1a;Nim游戏 先说结论&#xff1a;假设n堆石子&#xff0c;石子数分别为a1,a2,a3.....&#xff0c;则当a1^a2^a3^...^an0时先手必败&#xff0c;否则先手必胜。 因为所表示的二进制位必定是成对出现的&#xff0c;根据性质 1 ^ 1 0 &#xff0c;0 …

MyBatis 源码分析 - 缓存原理

MyBatis 源码分析 - 缓存原理 1.简介 在 Web 应用中&#xff0c;缓存是必不可少的组件。通常我们都会用 Redis 或 memcached 等缓存中间件&#xff0c;拦截大量奔向数据库的请求&#xff0c;减轻数据库压力。作为一个重要的组件&#xff0c;MyBatis 自然也在内部提供了相应的…

量子密钥分发系统的设计与实现(二):光路子系统初步讨论

通过上一篇文章&#xff0c;我们对量子密钥分发系统的基本架构、硬件结构以及密钥分发流程进行了初步的总体介绍&#xff0c;从本文开始&#xff0c;我们就基于系统顶层的架构设计&#xff0c;开始从模块到器件&#xff0c;从硬件到软件开始详细讨论QKD系统的设计与实现。本文主…

【转】这些年背过的面试题——网络和操作系统基础篇

转自&#xff1a;阿里巴巴技术质量 阿里云开发者 阿里妹导读 本文是技术人面试系列网络和操作系统基础篇&#xff0c;面试中关于网络和操作系统基础都需要了解哪些内容&#xff1f;一文带你详细了解&#xff0c;欢迎收藏&#xff01; 网络基础 TCP三次握手 三次握手过程&…

陇剑杯 ios 流量分析 CTF writeup

陇剑杯 ios 流量分析 链接&#xff1a;https://pan.baidu.com/s/1KSSXOVNPC5hu_Mf60uKM2A?pwdhaek 提取码&#xff1a;haek目录结构 LearnCTF ├───LogAnalize │ ├───linux简单日志分析 │ │ linux-log_2.zip │ │ │ ├───misc日志分析 │ │…

华为云服务镜像手动更换

操作步骤&#xff1a; 1、进入华为云首页点击云容器引擎CCE&#xff1b; 2、选择你所要更换镜像的环境【这里以dev环境演示】&#xff1b; 3、点击dev环境后选择顶部的命名空间&#xff0c;点击【工作负载】中右侧栏的【升级】按钮&#xff1b; 4、点【更换镜像】选择你在test…

压缩感知的概述梳理(1)

参考文献 An efficient visually meaningful image compression and encryption scheme based on compressive sensing and dynamic LSB embedding 基本内容 基本关系梳理 压缩感知核心元素 信号 x 长度&#xff1a;N动态稀疏或可用变换表示&#xff1a;x &#x1d74d;s …

一篇文章带你快速认识区块链(必看)

引言 区块链技术&#xff0c;这一划时代的分布式账本技术&#xff0c;正在全球范围内掀起一场深度的信任与协作模式变革。区块链如同一部由多方共同维护的公开而又安全的大账本&#xff0c;每一笔交易都被打包成一个区块&#xff0c;通过高级密码学手段确保传输和访问安全&…

React中redux、react-redux、@reduxjs/toolkit状态管理库的使用方式

效果 下载依赖 npm install redux react-redux reduxjs/toolkit --save在src目录下创建文件 创建index.ts文件 import { configureStore } from reduxjs/toolkit import userSlice from ./userReducerconst store configureStore({reducer: {user: userSlice.reducer} }) //…

浅析LED节能原理

随着全球对节能环保意识的增强&#xff0c;LED显示屏行业也在积极探索更加节能的生产和使用方式。作为显示屏制造厂家&#xff0c;了解和应用LED节能原理不仅是市场的需求&#xff0c;也是企业履行社会责任的表现。本文将浅析LED节能原理及其在显示屏制造中的应用。 LED节能的基…

关于catkin_make时动态链接库lib缺失问题

原因&#xff1a;GeographicLib未被安装&#xff0c;或者cmakelist链接错误 首先查看是否安装GeographicLib以及对应安装位置 输入dpkg -L libgeographic-dev 找到对应的FindGeographicLib.cmake&#xff0c;前面的/usr/share/cmake/geographiclib就是安装路径&#xff0c;用…

Centos服务器安装MySQL

Centos服务器安装MySQL 利用闲置服务器安装MySQL&#xff0c;用于项目练手 Linux版本&#xff1a;Centos7.9 MySQL版本&#xff1a;8.0.36 一、下载MySQL 从Oracle官网下载最新版本的MySQL wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.36-1.el7.x86_64.rp…

甘特图:项目管理者的必备神器,如何提高工作效率?

甘特图是什么&#xff1f;项目管理者大多都熟悉甘特图&#xff0c;它是一种直观展示项目计划执行过程的工具。通过条形图来显示项目、任务的时间安排&#xff0c;以及实际进度与计划进度的对比情况。 在我个人的项目管理实践中&#xff0c;甘特图确实帮助我提高了工作效率&am…

js时间格式切割转换

1.原格式&#xff1a;2024-04-16T16:19:23 转换为 2024/04/16 代码&#xff1a; console.log(item.createTime,切割前);item.createTime item.createTime ? item.createTime.split(T)[0].replace(/-/g, "/") : item.createTime console.log(item.cre…

2024基于PHP开发的微信抖音小程序点餐系统开发源代码案例

最近新开发了一套小程序点餐系统&#xff0c;用户点餐之后可以选择堂食或者是外卖到家&#xff0c;这套系统主要功能有&#xff0c;产品展示&#xff0c;支付系统&#xff0c;外卖配送&#xff0c;用户系统&#xff0c;积分系统&#xff0c;商家管理系统&#xff0c;抽奖系统&a…

第47篇:简易处理器<一>

Q&#xff1a;本期我们开始介绍一种数字系统----简易处理器&#xff0c;可以执行由指令指定的各种操作。 A&#xff1a;简易处理器包含多个9位寄存器、一个数据选择器、一个加/减法器单元和一个控制单元(有限状态机)。 数据选择器&#xff1a;可以将输入数据加载到各种寄存器&…

Docker向harbor上传大镜像的413报错

一、背景 最近遇到了个需求&#xff0c;某厂商的系统模块以容器模式部署在我们的内网环境中&#xff0c;厂商为我们提供了一个公网仓库&#xff0c;需要我们自己下载相关镜像。因此&#xff0c;获取镜像只能通过两种方式&#xff1a; 1.在我们的个人设备上pull镜像&#xff0c…

linux进阶篇:使用Apache搭建文件服务器目录

Linux服务搭建篇&#xff1a;使用Apache搭建文件服务器目录 一、关于文件服务器 ​ 在一个项目中&#xff0c;如果想把公共软件或者资料共享给项目组成员&#xff0c;可以搭建一个简易的文件服务器来实现&#xff0c;只要是在局域网内的成员都可以通过浏览器或者wget命令来下…

网络安全事件频发,让态势感知来提前洞察快速防护

一、引言 随着信息技术的飞速发展&#xff0c;网络安全问题日益凸显&#xff0c;成为社会各界普遍关注的焦点。近年来&#xff0c;网络安全事件频发&#xff0c;给个人、企业乃至国家带来了严重的损失。这些事件不仅揭示了网络安全领域的严峻挑战&#xff0c;也敲响了信息安全…

113 如何排查 cpu 过高的业务进程

前言 又是一个面试问题, 呵呵 之前碰到的 一个 java 进程 cpu 占用率过高, 应该如何排查? 对于这种问题, 第一反应就是 jstack, pstack, 然后仔细观察多次堆栈信息结果的 重复率较高的代码 因此 我给出的思路是, 写脚本 多次 jstack 目标进程, 然后 再统计分析一下 出现频…