svg教程

简单来说:

位图:放大会失真图像边缘有锯齿;是由像素点组成;前端的 Canvas 就是位图效果。

矢量图:放大不会失真;使用 XML 描述图形。

我在 知乎 上找了一个图对说明一下。

左边是位图,右边是矢量图

那么 SVG 是什么呢?它是矢量图的其中一种格式。它是用 XML 来描述图形的。

对于初学 SVG 的前端来说,可以简单的理解为 “SVG 是一套新标签”。

所以可以使用 CSS 来设置样式,也可以使用 JS 对 SVG 进行操作。

基本使用:

可以在html中直接使用svg,< svg>< /svg>标签,不需要像canvas在js中操作。

<svg></svg> 
//在不给 <svg> 设置宽高时,它的默认宽度是 300px ,默认高度是 150px 。这点和 <canvas> 是一样的。
第二章 基础图形
矩形


画一个200宽,100高的矩形

svg的默认值

填充色:默认黑色

svg大小:默认宽度300px,默认高度150px

<svg style="border: solid 1px red">
    <rect width="200" height="100"></rect>
</svg>
调整矩形位置


通过 x 和 y 可以设置矩形位置

<svg style="border: solid 1px red">
  <rect x="20" y="20" width="200" height="100"></rect>
</svg>
圆角矩形


rx 是设置x轴的半径,ry 设置y轴的半径。

rx 的最大值是矩形宽度的一半,ry 的最大值是矩形高度的一半。

<svg style="border: solid 1px red">
  <rect x="20" y="20" rx="20" ry="40" width="200" height="100"></rect>
</svg>
如果rx,ry只设置其中一个,默认两个值相同

<svg style="border: solid 1px red">
  <rect x="20" y="20" rx="20"  width="200" height="100"></rect>  
</svg>
此时rx,ry都为20
rect版本的圆形


rx,ry有点像css中的圆角border-radius的属性一样,所以画出如下图片。

同样我们也可以通过设置值,变为椭圆形。但是svg中我不推荐。因为我们有专门的标签去实现。

<svg style="border: solid 1px red">
  <rect width="100" height="100" rx="50"></rect>
</svg>
圆形
圆形使用 <circle> 标签,基础属性有:

cx: 圆心在x轴的坐标

cy: 圆心在y轴的坐标

r: 半径

注意cx,cy需要大于半径,否则显示不完全

<svg style="border: solid 1px red">
  <circle cx="60" cy="60" r="50"></circle>
</svg>
椭圆
椭圆使用 <ellipse> 标签,基础属性有:

cx: 圆心在x轴的坐标

cy: 圆心在y轴的坐标

rx: x轴的半径

ry: y轴的半径

<svg style="border: solid 1px red">
  <ellipse  cx="60" cy="60" rx="50" ry="30"></ellipse>
</svg>
直线
直线使用 <line> 标签,基础属性有:

x1: 起始点x坐标

y1: 起始点y坐标

x2: 结束点x坐标

y2: 结束点y坐标

stroke: 描边颜色

注意:只有 x1 和 x2 ,没有 x3 ,也没有 y3 。<line> 需要使用设置 stroke 属性才会有绘制效果。

  <svg style="border: solid 1px red">
    <line x1="10" y1="10" x2="60" y2="60" stroke="red"></line>
  </svg>
折线
使用 <polyline> 可以绘制折线,基础属性有:

points: 点集

stroke: 描边颜色

fill: 填充颜色

如果是绘制折线,需要将fill设置为none,因为自带颜色是黑色填充色。fill="none"

points 接受的值是一串点集,点集是两两一组表示一个坐标。

其实点集完全不需要用逗号隔开,上面的例子中我使用了逗号隔开,完全是为了让自己阅读代码时比价易懂。一个逗号分隔一个 xy 坐标。

  <svg style="border: solid 1px red">
      <polyline points="10 10,60 60,10 90" stroke="red" fill="none"></polyline>
  </svg>
如果不将填充设置为空,就会出现以下效果

  <svg  height="300" style="border: solid 1px red">
      <polyline points="10 10,60 60,10 90" stroke="red" ></polyline>
  </svg>
多边形
多边形使用 <polygon> 标签,基础属性和 <polyline> 差不多:

points: 点集

stroke: 描边颜色

fill: 填充颜色

<polygon> 会自动闭合(自动将起始点和结束点链接起来)

  <svg  height="300" style="border: solid 1px red">
      <polygon points="10 10,60 60,10 90" stroke="red"></polygon>
  </svg>
path
其实在 SVG 里,所有基本图形都是 <path> 的简写。所有描述轮廓的数据都放在 d 属性里,d 是 data 的简写。

d 属性又包括以下主要的关键字(注意大小写!):

M: 起始点坐标,moveto 的意思。每个路径都必须以 M 开始。M 传入 x 和 y 坐标,用逗号或者空格隔开。

L: 轮廓坐标,lineto 的意思。L 是跟在 M 后面的。它也是可以传入一个或多个坐标。大写的 L 是一个绝对位置。

l: 这是小写 L,和 L 的作用差不多,但 l 是一个相对位置。

H: 和上一个点的Y坐标相等,是 horizontal lineto 的意思。它是一个绝对位置。

h: 和 H 差不多,但 h 使用的是相对定位。

V: 和上一个点的X坐标相等,是vertical lineto 的意思。它是一个绝对位置。

v: 这是一个小写的 v ,和大写 V 的差不多,但小写 v 是一个相对定位。

Z: 关闭当前路径,closepath 的意思。它会绘制一条直线回到当前子路径的起点。

概念说了一堆,还是用写 demo 的方式来展示会更加直观。

  <svg  height="300" style="border: solid 1px red">
      <path d="M 10 10 L 50 60 L 10 100" fill="none" stroke="red"></path>
  </svg>
使用 stroke 设置描边的颜色,使用 fill="none" 将填充色改成透明。最后就形成上图的效果。

简写
  <svg  height="300" style="border: solid 1px red">
      <path d="M 10 10  50 60  10 100" fill="none" stroke="red"></path>
  </svg>
上面的 d="M 10 10 50 40 100 10" 等同于 d="M 10 10 L 50 40 L 100 10" 。

闭合路径
在 d 的数据集里,使用 Z 可以闭合路径。

  <svg  height="300" style="border: solid 1px red">
      <path d="M 10 10  50 60  10 100 z" fill="none" stroke="red"></path>
  </svg>


上面的代码中,d="M 10 10 l 50 40 l 100 10 Z" 等同于 d="M 10 10 L 60 50 L 160 60 Z" 。

  <svg width="300" height="300" style="border: 1px solid red;">
    <path
        d="M 10 10 l 50 40 l 100 10 Z"
        stroke="blue"
        fill="none"
    >
    </path>
  </svg>
H 和 h
H 后面只需传入 X坐标 即可,它的 Y坐标 与前一个点相同。

  <svg width="300" height="300" style="border: 1px solid red;">
    <path
        d="M 10 10 H 100"
        stroke="blue"
        fill="none"
    >
    </path>
  </svg>
而 h 和 H 的作用差不多,只不过传入的数据会和前一个点的 X坐标 相加,形成一个新的点,这就是相对位置。

  <svg width="300" height="300" style="border: 1px solid red;">
    <path
        d="M 10 10 h 100"
        stroke="blue"
        fill="none"
    >
    </path>
  </svg>
V 和 v
V 后面只需传入 Y坐标 即可,它的 X坐标 与前一个点相同。

  <svg width="300" height="300" style="border: 1px solid red;">
    <path
        d="M 10 10 V 100"
        stroke="blue"
        fill="none"
    >
    </path>
  </svg>
v 和 V 的作用差不多,小写 v 是一个相对位置。

  <svg width="300" height="300" style="border: 1px solid red;">
    <path
        d="M 10 10 v 100"
        stroke="blue"
        fill="none"
    >
    </path>
  </svg>
椭圆弧
前面讲到的 直线路径 path 是比较好理解的,它把所有点都用直线连接起来即可。只要确定2个点就可以画出一根线段。

但如果只用两个点,可以产生无数条曲线。所以需要添加更多的参数来确定如何绘制一条曲线。而在种种方法中,我认为 椭圆弧曲线 是最简单的。

椭圆弧曲线,顾名思义就是和椭圆有关的。如果在椭圆上选择两个点,就可以截取2条曲线。

比如这样,红线处就将椭圆截取成2段弧线。

椭圆弧公式
在 SVG 中可以使用 path 配合 A属性 绘制椭圆弧。

A(rx, ry, xr, laf, sf, x, y)
复制代码
rx: 椭圆X轴半径

ry: 椭圆Y轴半径

xr: 椭圆旋转角度

laf: 是否选择弧长较长的那一段。0: 短边(小于180度); 1: 长边(大于等于180度)

sf: 是否顺时针绘制。0: 逆时针; 1: 顺时针

x: 终点X轴坐标

y: 终点Y轴坐标

上面的公式中并没有开始点,开始点是由 M 决定的。

也就是说,确定2个点,再确定椭圆半径,就可画出2个椭圆

通过开始点和结束点裁切,可以得到4条弧线,也就是说2个点可以确定2个相同旋转角度的椭圆的位置,可以切出4条弧线。

  <svg width="400" height="400" style="border: 1px solid red;">
    <!-- 红 -->
    <path
        d="M 125 75 A 100 50 0 0 0 225 125"
        stroke="red"
        fill="none"
    />

    <!-- 黄 -->
    <path
        d="M 125 75 A 100 50 0 0 1 225 125"
        stroke="yellow"
        fill="none"
    />

    <!-- 蓝 -->
    <path
        d="M 125 75 A 100 50 0 1 0 225 125"
        stroke="blue"
        fill="none"
    />

    <!-- 绿 -->
    <path
        d="M 125 75 A 100 50 0 1 1 225 125"
        stroke="green"
        fill="none"
    />
  </svg>
第三章 设置样式的方法
设置 SVG 元素样式其实和 CSS 差不多,常见的方法有4种。

属性样式

内联样式

内部样式

外部样式

属性样式
直接在元素属性上设置样式,比如将矩形填充色改成粉红

<svg width="400" height="400" style="border: 1px solid red;">
  <rect
    x="100"
    y="100"
    width="200"
    height="100"
    fill="pink"
  />
</svg>
复制代码
内联样式
把所有样式写在 style 属性里

<svg width="400" height="400" style="border: 1px solid red;">
  <rect
    x="100"
    y="100"
    width="200"
    height="100"
    style="fill: pink;"
  />
</svg>
复制代码
内部样式
将样式写在 <style> 标签里

<style>
  .rect {
    fill: pink;
  }
</style>

<svg width="400" height="400" style="border: 1px solid red;">
  <rect
    x="100"
    y="100"
    width="200"
    height="100"
    class="rect"
  />
</svg>
复制代码
外部样式
将样式写在 .css 文件里,然后在页面中引入该 CSS 文件。

第四章 常用样式设置
SVG 设置样式的属性和 CSS 稍微有点不同,但初学时不需要了解太深入,我们只需将常用的学会即可。

比如填充色、描边颜色等。

说到颜色,SVG 和 CSS 支持的颜色值其实差不多的,比如:

关键字: red、pink、blue 等

十六进制: 支持3位或6位,#0f0、#00ff00

RGB 和 RGBA: 比如 rgb(10, 20, 30) 或 rgba(10, 20, 30, 0.4)

HSL 和 HSLA

接下来讲到的所有常规属性,除了在元素属性上设置之外,都支持在 CSS 中设置。

填充 fill
要填充图案颜色,可以设置 fill 属性。这个属性在前面的例子也使用过多次。

fill 默认是 #000000 ,也就是黑色。

<svg width="400" height="400" style="border: 1px solid red;">
  <rect
    x="100"
    y="100"
    width="200"
    height="100"
    fill="greenyellow"
  />
</svg>
复制代码
也可以使用 none 或者 transparent 将填充色设置成透明。

填充色的不透明度 fill-opacity
如果想让填充色有点 半透明 的感觉,可以设置 fill-opacity 属性,也可以在 fill 属性中使用 RGBA 或者 HSLA。

本例使用 fill-opacity 设置,它的取值是 0 - 1,0 代表完全透明,1 代表完全不透明。小于 0 的值会被改为 0,大于 1 的值会被改为 1 。

<svg width="400" height="400" style="border: 1px solid red;">
  <rect
    x="100"
    y="100"
    width="200"
    height="100"
    fill="red"
    fill-opacity="0.2"
  />
</svg>
复制代码
fill 属性中使用 RGBA 或者 HSLA 的方式你自己动手试试看~

描边颜色 stroke
可以通过 stroke 属性设置描边的颜色,之前也使用过。如果不设置 stroke ,图形默认是没有描边颜色的。

<svg width="400" height="400" style="border: 1px solid red;">
  <rect
    x="100"
    y="100"
    width="200"
    height="100"
    fill="none"
    stroke="blue"
  />
</svg>
复制代码
我将填充色设置成透明,方便观察蓝色边框。

描边颜色的不透明度 stroke-opacity
和 fill-opacity 差不多,只不过 stroke-opacity 是设置描边的不透明度

<svg width="400" height="400" style="border: 1px solid red;">
  <rect
    x="100"
    y="100"
    width="200"
    height="100"
    fill="none"
    stroke="blue"
    stroke-opacity="0.3"
  />
</svg>
复制代码
描边宽度 stroke-width
如果需要调整描边的宽度,可以使用 stroke-width,它接收一个数值

<svg width="400" height="400" style="border: 1px solid red;">
  <rect
    x="100"
    y="100"
    width="200"
    height="100"
    fill="none"
    stroke="blue"
    stroke-width="10"
  />
</svg>
复制代码
虚线描边 stroke-dasharray
边框的 点线 或者 虚线 样式,可以使用 stroke-dasharray 设置,这和 Canvas 里设置虚线的操作其实是差不多。

stroke-dasharray 接收一串数字,这串数字可以用来代表 线的长度和空隙的长度,数字之间用逗号或者空格分隔。

建议传入偶数个数字。但如果你传入了奇数个数字,SVG 会将这串数字重复一遍,使它的数量变成 偶数个 。

<svg width="400" height="400" style="border: 1px solid red;">
  <line
    x1="30"
    y1="30"
    x2="300"
    y2="30"
    stroke="blue"
  />

  <line
    x1="30"
    y1="70"
    x2="300"
    y2="70"
    stroke="blue"
    stroke-dasharray="20 10"
  />

  <line
    x1="30"
    y1="110"
    x2="300"
    y2="110"
    stroke="blue"
    stroke-dasharray="20 10 30"
  />
</svg>
复制代码
虚线偏移量 stroke-dashoffset
虚线还可以通过 stroke-dashoffset 属性设置偏移量,它接收一个数值类型的值。

<svg width="400" height="400" style="border: 1px solid red;">
  <line
    x1="30"
    y1="30"
    x2="300"
    y2="30"
    stroke="blue"
    stroke-width="10"
    stroke-dasharray="20 10 30"
  />

  <line
    x1="30"
    y1="90"
    x2="300"
    y2="90"
    stroke="blue"
    stroke-width="10"
    stroke-dasharray="20 10 30"
    stroke-dashoffset="10"
  />
</svg>
复制代码
我加粗了虚线,方便观察偏移量。

线帽 stroke-linecap
线帽就是线的起始点和结束点的位置,用 stroke-linecap 属性可以设置线帽样式。

线帽有3个值:

butt: 平头(默认值)

round: 圆头

square: 方头

<svg width="400" height="400" style="border: 1px solid red;">
  <!-- 平头 -->
  <line
    x1="30"
    y1="30"
    x2="300"
    y2="30"
    stroke="blue"
    stroke-width="10"
    stroke-linecap="butt"
  />

  <!-- 圆头 -->
  <line
    x1="30"
    y1="70"
    x2="300"
    y2="70"
    stroke="blue"
    stroke-width="10"
    stroke-linecap="round"
  />

  <!-- 方头 -->
  <line
    x1="30"
    y1="110"
    x2="300"
    y2="110"
    stroke="blue"
    stroke-width="10"
    stroke-linecap="square"
  />
</svg>
复制代码
可以看到 square 比 butt 要稍微长一丢丢。

拐角 stroke-linejoin
拐角就是折线的交接点,可以使用 stroke-linejoin 设置,它接收以下属性:

miter: 尖角(默认)

round: 圆角

bevel: 平角

<svg width="400" height="400" style="border: 1px solid red;">
  <!-- 尖角 -->
  <polyline
    points="30 60, 60 30, 90 60"
    fill="none"
    stroke="blue"
    stroke-width="20"
    stroke-linejoin="miter"
  />

  <!-- 圆角 -->
  <polyline
    points="30 120, 60 90, 90 120"
    fill="none"
    stroke="blue"
    stroke-width="20"
    stroke-linejoin="round"
  />

  <!-- 平角 -->
  <polyline
    points="30 180, 60 150, 90 180"
    fill="none"
    stroke="blue"
    stroke-width="20"
    stroke-linejoin="bevel"
  />
</svg>
复制代码
消除锯齿 shape-rendering
如果你觉得 SVG 在浏览器显示出来的图像有点模糊,那可能是开启了 反锯齿 功能,可以通过 CSS 属性关闭该功能。

shape-rendering: crispEdges;
复制代码
将该属性设置到对应的 svg 元素上,就会关闭反锯齿功能,突显看起来就会清晰很对,但在某些情况关闭了该功能会让图像看起来有点毛躁的感觉。

如果想开启反锯齿功能,可以这样设置:shape-rendering: geometricPrecision;

第五章 svg地图
在日常的开发中使用svg去画地图(缩放无损还原,显示清晰)

地图下载地址:DataV.GeoAtlas地理小工具系列

下载完你想要的地图之后,就可以通过文本的形式打开

复制下来到你的html代码中去就可以了

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

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

相关文章

Maven Helper插件——实现一键Maven依赖冲突问题

总结/朱季谦 业余在一个SpringBoot项目集成Swagger2时&#xff0c;启动过程一直出现以下报错信息—— An attempt was made to call a method that does not exist. The attempt was made from the following location: ​ springfox.documentation.schema.DefaultModelDepe…

vue创建公共指令文件并引入

创建公共js文件 globalDirective.js // globalDirective.js export default {install(Vue) {Vue.directive(global-name, { // 指令名// 指令});} };在main.js文件内引入 // main.js import globalDirectives from ./globalDirectives; Vue.use(globalDirectives);在vue文件中…

独立搭建UI自动化测试框架分享

前言 今天给大家分享一个seleniumtestngmavenant的UI自动化&#xff0c;可以用于功能测试&#xff0c;也可按复杂的业务流程编写测试用例&#xff0c;今天此篇文章不过多讲解如何实现CI/CD&#xff0c;只讲解自己能独立搭建UI框架&#xff0c;如果有其他好的框架也可以联系我&…

SQL注入 - CTF常见题型

文章目录 题型一 &#xff08; 字符型注入 &#xff09;题型二 &#xff08; 整数型注入 &#xff09;题型三 &#xff08; 信息收集SQL注入&#xff09;题型四 &#xff08; 万能密码登录 &#xff09;题型五 &#xff08; 搜索型注入文件读写 &#xff09;题型六 &#xff08…

1-1、汇编语言概述

语雀原文链接 文章目录 1、机器语言2、汇编语言&#xff08;Assembly Language&#xff09;汇编语言工作过程汇编语言三类指令 3、学习资料电子PDF课件论坛视频教程 1、机器语言 机器语言是机器指令的集合。机器指令展开来讲就是一台机器可以正确执行的命令。电子计算机的机器…

比特币上的有状态多重签名

无需链下通信 介绍 随着区块链和加密货币空间的发展&#xff0c;越来越需要增强安全措施来保护数字资产。 应对这一挑战的突出解决方案之一是多重签名&#xff08;多重签名&#xff09;钱包。 这些钱包在执行交易之前需要多方签名&#xff0c;从而提供额外的安全层来防止未经授…

【产品设计】SaaS平台产品架构设计

产品架构是基于业务架构的&#xff0c;那么做产品架构前&#xff0c;需要对业务架构有哪些清晰的了解呢&#xff1f; 当我们去搜索“架构”&#xff0c;可以得到很多的架构图片&#xff0c;比如组织架构、业务架构、数据架构、技术架构、安全架构、产品架构、部署架构等。 什么…

代码笔记---JavaScript--(防抖-节流-清理所有定时器-定时任务)

文章目录 清理所有定时器防抖代码节流代码自定义时间戳定时器复杂实现 vueuse中工具类 定时任务手动实现工具类useInterval 清理所有定时器 export function clearAllTimer() {let id setTimeout(() > { }, 0)while (id > 0) {window.clearTimeout(id)id--} }防抖代码 …

容器相关面试题

什么是容器&#xff1f; 容器是一种轻量级、可移植的软件打包和部署技术&#xff0c;用于将应用程序及其依赖项打包在一起以便在不同环境中运行。容器化技术的主要目标是提高应用程序的可移植性、一致性和可部署性。 关键特征和概念&#xff1a; 轻量级&#xff1a; 容器共享…

SpringCloud--分布式事务实现

一、分布式事务 首先要明白事务是指数据库中的一组操作&#xff0c;这些操作要么全部成功执行&#xff0c;要么全部不执行&#xff0c;以保持数据的一致性和完整性。在本地事务中&#xff0c;也就是传统的单机事务&#xff0c;必须要满足原子性(Atomicity)、一致性(Consistenc…

通过栅格地图,目标路径(目标点)建立距离场地图

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言(1)距离场输出(2)实现原理1、更新地图调用setLocalGoal()【一个目标点】,或setTargetCells()【一条路径】2、计算当前位置离目标路径的距…

Linux安全之auditd审计工具使用说明

一、auditd工具简介 audited是Linux审核系统的用户空间组件。它负责将审核记录写入磁盘。查看日志是通过ausearch或aureport实用程序完成的。审核系统或加载规则的配置是使用auditctl实用程序完成的。在启动过程中&#xff0c;/etc/audit/audit.rules中的规则由auditctl读取并加…

【傻瓜级JS-DLL-WINCC-PLC交互】1.C#用windows窗体控件创建.net控件

思路 JS-DLL-WINCC-PLC之间进行交互&#xff0c;思路&#xff0c;先用Visual Studio创建一个C#的DLL控件&#xff0c;然后这个控件里面嵌入浏览器组件&#xff0c;实现JS与DLL通信&#xff0c;然后DLL放入到WINCC里面的图形编辑器中&#xff0c;实现DLL与WINCC的通信。然后PLC与…

visual c++ 2019 redistributable package

直接安装下面包只有24M Microsoft Visual C Redistributable 2019 x86: https://aka.ms/vs/16/release/VC_redist.x86.exe x64: https://aka.ms/vs/16/release/VC_redist.x64.exe ———————————————— 版权声明&#xff1a;本文为CSDN博主「kpacnB_Z」的原创文章…

uniapp设置手机通知权限

提醒用户开启通知权限&#xff0c;与unipush功能联用 效果图&#xff1a; 方法&#xff1a; 直接使用即可&#xff0c;在真机或模拟器运行 setPermissions() {// #ifdef APP-PLUS if (plus.os.name Android) { // 判断是Androidvar main plus.android.runtimeMainActivity…

gRPC之grpc自定义负载均衡(resolver)

1、grpc自定义负载均衡(resolver) 1.1 proto编写和编译 syntax "proto3"; package pb; option go_package "./;pb";service Greeter {rpc SayHello (HelloRequest) returns (HelloReply) {} }message HelloRequest {string name 1; }message HelloRep…

oracle免费资源 终止实例 以及新建一台实例的折腾记录

事情的背景是这样的&#xff0c;我的一台oracle小鸡&#xff0c;不太好用的样子&#xff0c;有时候SSH连不上&#xff0c;有时候莫名其妙卡住。所以我就想把它重新安装一下系统&#xff0c;恢复成最初的样子。 然后在网上查资料&#xff0c;是有办法把系统重装一下的。但是略微…

抖去推--短视频账号矩阵系统saas工具源码技术开发

一、短视频矩阵系统搭建常见问题&#xff1f; 1、抖去推的短视频AI矩阵营销软件需要一定的技术水平吗&#xff1f; 答&#xff1a;不需要。产品简单易用&#xff0c;不需要具备专业的技术水平&#xff0c;即使是初学者&#xff0c;也能够轻松上手操作。 3、抖去推的短视频AI矩…

MySQL巧用公用表表达式(CTE)处理递归查询

概述 根据《MySQL 8.0 Reference Manual》的描述&#xff0c;Common Table Expressions&#xff08;简称CTE&#xff09;是一种名为临时结果集的表达式。它可以用来构造复杂的查询语句&#xff0c;并且可以在多个查询中重复使用同一个结果集。CTE的优点是可以使查询语句更加简…

神经网络可视化——基于torchviz绘制模型的计算图

神经网络可视化——基于torchviz绘制模型的计算图 第一步、安装 graphviz 和 torchviz 库 第二步、编写代码生成计算图 第三步、安装graphviz软件 在深入理解深度学习模型时&#xff0c;可视化网络结构是一个非常有用的手段。今天介绍如何使用 torchviz 和 graphviz 来生成网…