canvas、svg的基本使用【数据可视化】

news2024/11/23 3:51:30

什么是数据可视化?

基本概念:是关于数据视觉表现形式的科学技术研究
这个概念向我们传达了两个信息:
(1)数据可视化是一门学科
(2)数据可视化与数据和视觉有关
数据可视化简单理解,就是将数据转换成易于人员辨识和理解的视觉表现形式,如各种2D图标、3D图标、地图、矢量图等等,随着技术的不断进步,数据可视化的边界也在不断扩大。
特点

  • 单机离线
  • 数据量小,维度小

1.canvas

1.1 canvas绘制线段

canvas是HTML5的新特性,它允许我们使用canvas元素在网页上通过javaScript绘制图像。

canvas标签

  • canvas标签默认宽度与高度 300 * 150
  • 浏览器认为canvas标签是一张图片
  • 给canvas画布添加文本内容没有任何意义
  • 给canvas标签添加子节点没有任何意义的
  • 你想操作canvas画布:画布当中绘制图形、显示一个文字,都必须通过JS完成
  • canvas标签的width|height务必通过canvas标签属性width|height设置
  • 切记不能通过样式去设置画布的宽度与高度

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        canvas {
            border: 1px solid black;
        }
    </style>
</head>

<body>
    <canvas width="600" height="400"></canvas>
</body>

</html>
<script>
    //canvas标签任何操作务必通过JS完成
    //通过JS当中"笔"去完成
    let canvas = document.querySelector('canvas');
    //获取画布的笔【上下文】
    let ctx = canvas.getContext('2d');
    //绘制线段:绘制线段的起点的设置
    ctx.moveTo(100,100);
    //其他点的设置:可以有多个
    ctx.lineTo(100,200);
    ctx.lineTo(200,100);
    //设置图形的填充的颜色
    ctx.fillStyle = "red";
    ctx.fill();
    //设置线段的颜色与宽度
    ctx.strokeStyle = "purple";
    ctx.lineWidth="20"
    //可以设置起点与最终的结束点连接在一起
    ctx.closePath();
    //stroke方法绘制线段
    ctx.stroke();
</script>

1.2 canvas绘制矩形

  • fillRect(x, y, width, height) 绘制填充颜色的矩形
  • strokeRect(x, y, width, height) 绘制线条的矩形
    在这里插入图片描述
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            margin:0px;
            padding:0px
        }
        canvas{
            border:1px solid black;
        }
    </style>
</head>
<body>
     <canvas width="600" height="400"></canvas>
</body>
</html>
<script>
    //获取DOM节点
    let canvas = document.querySelector('canvas');
    //获取上下文
    let ctx = canvas.getContext('2d');
    //绘制矩形第一种方式:参数为x、y、w、h
    //这种的矩形没有办法设置填充颜色
    ctx.strokeRect(100,200,100,200);
    //第二种方式绘制矩形
    //填充颜色可以替换
    //绘制图形之前设置填充颜色
    ctx.fillStyle = 'skyblue';
    ctx.fill();
    ctx.fillRect(300,200,100,200);
</script>

1.3 canvas绘制圆形

  • arc(x, y, radius, starAngle, endAngle, anticlockwise)

    • x:圆心的x坐标
    • y:圆心的y坐标
    • radius:半径
    • starAngle:开始角度
    • endAngle:结束角度
    • anticlockwise:是否逆时针(true)为逆时针,(false)为顺时针
      在这里插入图片描述
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        canvas{
            border: 1px solid black;
        }
    </style>
</head>
<body>
     <canvas width="600" height="400"></canvas>
</body>
</html>
<script>
     //获取DOM
     let canvas = document.querySelector('canvas');
     //获取上下文
     let ctx = canvas.getContext('2d');
     //绘制圆形
     ctx.beginPath();
     //绘制圆形的方法:x、y,r,起始弧度、结束的弧度,是否逆时针绘制
     ctx.arc(100,100,50,0,2 * Math.PI,true);
     //设置填充颜色
     ctx.fillStyle = 'red';
     ctx.fill();
     //绘制圆形
     ctx.stroke();

     //绘制一个元
     ctx.beginPath();
     ctx.arc(200,200,50,0,1,true);
     ctx.stroke();
</script>

1.4 清除画布与绘制文字

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            margin: 0 ;
            padding: 0;
        }
        canvas{
            border: 1px solid black;
        }
    </style>
</head>
<body>
     <!-- 画布的宽度与高度通过属性设置,千万别通过样式去设置 -->
     <canvas width="600" height="400"></canvas>
</body>
</html>
<script>
     //获取节点
     let canvas = document.querySelector('canvas');
     //获取上下文-笔
     let ctx = canvas.getContext('2d');
     //绘制矩形
     ctx.fillRect(100,200,100,200);
     //清除画布-整个画布被清除
    //ctx.clearRect(0,0,600,400);
    //清除部分画布
    ctx.clearRect(100,200,50,100);
    //设置文字大小
    ctx.font="20px 微软雅黑";
    ctx.fillStyle ='red';
    //绘制文字
    ctx.fillText("数据可视化",50,20);
</script>

1.5 绘制柱状图

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        canvas{
            border: 1px solid red;
        }
    </style>
</head>
<body>
     <canvas width="800" height="420"></canvas>
</body>
</html>
<script>
     //获取节点
     let canvas = document.querySelector('canvas');
     //获取上下文
     let ctx = canvas.getContext('2d');
     //绘制文本--左上角的文本
     ctx.font="16px 微软雅黑";
     ctx.fillText('数据可视化',50,80);
     //绘制线段
     ctx.moveTo(100,100);
     ctx.lineTo(100,400);
     ctx.lineTo(700,400);
     ctx.stroke();

     //绘制其他的线段
     ctx.moveTo(100,100);
     ctx.lineTo(700,100);
     ctx.fillText('150',70,110);

     ctx.moveTo(100,160);
     ctx.lineTo(700,160);
     ctx.fillText('120',70,170);

     ctx.moveTo(100,220);
     ctx.lineTo(700,220);
     ctx.fillText('90',70,230);

     ctx.moveTo(100,280);
     ctx.lineTo(700,280);
     ctx.fillText('60',70,290);

     ctx.moveTo(100,340);
     ctx.lineTo(700,340);
     ctx.fillText('30',70,350);
     ctx.fillText('0',70,400);
     ctx.stroke();
     //绘制水平轴底部的线段
     ctx.moveTo(250,400);
     ctx.lineTo(250,410);
     //底部的文字
     ctx.fillText('食品',170,415);

     ctx.moveTo(400,400);
     ctx.lineTo(400,410);
     ctx.fillText('数码',310,415);
     ctx.moveTo(550,400);
     ctx.lineTo(550,410);
     ctx.fillText('服饰',450,415);
     ctx.fillText('箱包',600,415);
     ctx.stroke();

     //绘制矩形
     ctx.fillStyle = 'red';
     ctx.fillRect(120,200,100,200)
</script>

2. svg

svg是一种基于XML的图像文件格式,它的英文全称为Scalable Vector Graphics,意思为可缩放的矢量图形

2.1 基本的SVG元素

  • <svg>包裹并定义整个矢量图。
  • <line> 创建一条直线
  • <polyline> 创建折线
  • <circle> 创建圆
  • <ellipse> 创建圆和椭圆
  • <polygon> 创建多边形
  • <path> 指定点一级点和点之间的线来创建任意形状

svg双闭合标签:默认宽度与高度300 * 150
svg绘制图形务必在svg标签内部使用绘制图形

2.2 绘制直线

在这里插入图片描述

<svg class="box">
        <!-- x1 y1第一个点的坐标  x2 y2 第二个点的坐标 -->
        <line x1="100" y1="100" x2="200" y2="200" stroke="red"></line>
        <line x1="100" y1="200" x2="200" y2="100" stroke="red"></line>
 </svg>

2.3 绘制折线

在这里插入图片描述
绘制折线:可以多个点,多个点的时候,最好带有逗号

<polyline points="300 300, 50 100, 120 400,20,20" fill-opacity="0" stroke="cyan"></polyline>

2.4 绘制矩形

在这里插入图片描述
fill属性:设置填充颜色的 fill-opacity设置填充颜色的透明度 stroke:线的颜色

<rect x="400" y="400" width="150" height="50" fill="pink"></rect>

2.5 绘制圆形

在这里插入图片描述

<circle cx='370' cy='95' r='50' style='stroke:cyan; fill:none'</circle>

2.6 绘制圆形|椭圆

在这里插入图片描述

cx cy :圆心点坐标
rx: x轴半径
ry :y轴半径

<ellipse cx="500" cy="500" rx="100" ry="50" style="fill:black;"></ellipse>

2.7 多边形

在这里插入图片描述

<polygon points="600 100, 300 400, 750 100" stroke="red" fill-opacity="0" />

2.8 绘制任意图形

在这里插入图片描述
M:移动到初始位置
L:画线
Z:将结束和开始点闭合

<path fill-opacity="0" stroke="skyblue" d="
  M 10  10
  L 20 400
  L 30 120
  L 40 66
  L 50 99
  L 60 120
  L 70 99
  Z
"></path>

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

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

相关文章

veth网卡的多队列及RPS

背景&#xff1a; 3.10内核下容器使用的veth网卡&#xff0c;默认开启的是一个队列&#xff0c;导致在某些单线程多TCP链接的应用场景下&#xff0c;出现某个CPU软中断高的情况。之前处理的方案一直是开启这个veth网卡的RPS&#xff0c;让其在多流场景下可以去分散到其它CPU上…

DSSM - 双塔经典模型(微软)

《Learning Deep Structured Semantic Models for Web Search using Clickthrough Data》论文由微软发表于 CIKM-2013。DSSM被广泛用于工业界的 召回/粗排 阶段。 模型结构 模型结构一目了然&#xff0c;非常简单&#xff0c;双塔结构&#xff1a;user侧一个塔&#xff0c;ite…

ChatGPT的兴起的时代,国内chatgpt产品大盘点

在人工智能技术的不断发展和应用下&#xff0c;自然语言处理技术成为了研究的热点之一。而其中最受关注的就是“聊天机器人”技术&#xff0c;而GPT&#xff08;Generative Pre-trained Transformer&#xff09;模型则是目前最流行的聊天机器人生成模型之一。 随着 ChatGPT 技…

蓝牙RSSI/BLE AOA/UWB室内定位技术哪个好?

蓝牙AOA定位技术的出现&#xff0c;弥补了蓝牙RSSI值定位精度不高的缺陷。从理论上来说&#xff0c;可以对目前的蓝牙RSSI定位方案进行一定程度的替代。当然了&#xff0c;在高精度定位应用领域中&#xff0c;UWB定位已经在批量的成熟商用了。蓝牙AOA也具有很高的定位精度&…

单位网站被黑被下达整改进行行政处罚

最近这几年&#xff0c;由于信息系统安全等级保护法的普及&#xff0c;越来越多公司收到当地公安网监部门打来的电话&#xff0c;说你们公司网站有漏洞&#xff0c;需要限期在2-3内进行漏洞整改和加固&#xff0c;遇到这种情况&#xff0c;不要着急&#xff0c;下面来分享一下该…

JavaEE(系列8) -- 多线程案例(单例模式)

目录 1. 设计模式 2. 单例模式 -- 饿汉模式 3. 单例模式 -- 懒汉模式 4. 单例模式(懒汉模式-多线程) 1. 设计模式 什么是设计模式? 设计模式好比象棋中的 "棋谱". 红方当头炮, 黑方马来跳. 针对红方的一些走法, 黑方应招的时候有一些固定的套路. 按照套路…

【融合感知】激光雷达和相机融合感知-BEVFusion

BEVFusion有两篇文章&#xff0c;这里在一起分析下不同&#xff0c;分别是&#xff1a; 【1】BEVFusion: A Simple and Robust LiDAR-Camera Fusion Framework. 【2】BEVFusion: Multi-Task Multi-Sensor Fusion with Unified Bird’s-Eye View Representation 先说结论&…

品牌联名又出圈了!小红书数据揭示,引爆流量三部曲

这几天&#xff0c;你们的朋友圈是不是被喜茶FENDI黄刷屏啦&#xff1f;近日&#xff0c;茶饮品牌牵手意大利奢侈品牌联名上新&#xff0c;一跃成为各平台热门。 品牌新联名&#xff0c;这次又出圈了&#xff01; 喜茶可谓是联名界的老玩家了&#xff0c;曾与藤原浩、《梦华录》…

HTML5新增标签

前言 HTML5的新特性主要是针对以前的不足&#xff0c;增加了一些新标签&#xff0c;新表单和新表单属性 但是呢&#xff01;这些标签大多都存在兼容性的问题&#xff0c;基本是IE9以上的版本才支持 之前我们做布局&#xff0c;都用的是div&#xff0c;但是没有语义性 HTM…

Java开发的多商户商城系统源码小程序app

Java开发的多商户商城系统源码小程序app主要是为商家提供一个线上销售平台&#xff0c;实现商品展示、订单管理、支付等功能&#xff0c;并且支持多商户注册&#xff0c;以下是它的功能介绍&#xff1a; 一、 用户端&#xff1a;1. 用户注册与登录&#xff1a;用户可以使用手机…

关于LimeReport导出报告在Qt下的使用问题

关于这个第三方库的使用网上有很多资料了 具体说一下关于文本和图片控件的使用 1、文本使用 如果需要自定义文本内容&#xff0c;需要的格式为上图$V{}; 2、图片使用 如果需要自定义图片内容&#xff0c;需要的格式为上图$V{}&#xff0c;写法和文本内容一样&#xff1b; 3、…

博士毕业答辩流程 注意事项

前言&#xff1a;2023年5月17日14:00-17:00&#xff0c;与实验室其他同学一起旁听了本实验室的博士论文答辩。接下来&#xff0c;我对博士毕业答辩的大致流程进行简要介绍&#xff0c;并对个环节的注意事项进行总结归纳&#xff0c;供毕业生参考。 目录 1. 准备阶段2. 汇报期间…

Python 框架学习 Django篇 (一) 安装及基本使用

环境说明 python 3.11.3 Django 4.2.1 idea 2023.1 一、安装调试 我这里默认idea和python环境都是装好的&#xff0c;直接从建项目开始 新建项目 项目名称: demo 安装Django //配置清华镜像源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simp…

AMBER分子动力学模拟之结果分析(突变型的能量计算,丙氨酸扫描)-- HIV蛋白酶-抑制剂复合物(5)

AMBER分子动力学模拟之结果分析(突变型的能量计算,丙氨酸扫描)-- HIV蛋白酶-抑制剂复合物(5) 丙氨酸扫描 在带电残基上引入一个或几个丙氨酸&#xff0c;观察这些改变对蛋白功能的影响。置换成丙氨酸&#xff0c;去除了侧链上的活性基团&#xff0c;换成了体积小、无其他官能…

【AGC】新版鸿蒙崩溃SDK集成使用方法

【背景】 我们知道AGC的Crash SDK都是需要强制集成华为分析SDK的&#xff0c;在使用时的崩溃数据上报都要依靠分析服务来完成&#xff0c;这就容易受到限制&#xff0c;有时出现无数据的情况就要依次排查崩溃SDK与分析SDK&#xff0c;比较麻烦。而就在不久前&#xff0c;鸿蒙崩…

【Linux】内存映射

目录 内存映射相关函数解析代码示例1&#xff08;使用内存映射实现没有关系的进程间的通信&#xff09;&#xff1a;代码示例2&#xff08;使用内存映射实现文件间拷贝&#xff09;&#xff1a;匿名内存映射 橙色 内存映射 内存映射(Memory-mapped I/o)是将磁盘文件的数据映射…

GitLabRunner安装部署

实战&#xff1a;GitLabRunner安装部署-2023.4.26(安装成功) 目录 实验环境 gitlab/gitlab-ce:15.0.3-ce.0 gitlab-runner-15.0.1-1.x86_64.rpm实验软件 链接&#xff1a;https://pan.baidu.com/s/10aL_kWzDKnZXBXG3-hS2tA 提取码&#xff1a;0820 2023.4.26-实战&#xff1a…

HTTP第16讲——HTTP的重定向和跳转

背景 “超文本”里含有“超链接”&#xff0c;可以从一个“超文本”跳跃到另一个“超文本”&#xff0c;对线性结构的传统文档是一个根本性的变革。 能够使用“超链接”在网络上任意地跳转也是万维网的一个关键特性。它把分散在世界各地的文档连接在一起&#xff0c;形成了复杂…

058:cesium设置图片纹理材质

第058个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置图片材质,相当于在球体上贴图。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共85行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设…

如何批量旋转图片方向,包教会方法分享

如何批量旋转图片方向&#xff0c;这个怎么搞呢&#xff1f;小编曾经遇到一个问题&#xff0c;就是我将手机上的照片上传到电脑后发现所有的图片都是倒立的&#xff0c;这让查看变得非常不方便。尽管小编已经尝试过打开每张图片并逐个旋转后再另存为&#xff0c;但这种方式十分…