Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >SVG绘制饼状图

SVG绘制饼状图

原创
作者头像
mySoul
发布于 2018-10-15 05:06:08
发布于 2018-10-15 05:06:08
2.7K0
举报
文章被收录于专栏:mySoulmySoul

SVG绘制饼状图

昨天学习了基本的SVG,下面是使用SVG绘制饼状图

创建SVG空间

创建SVG

需要一个document.createElementNS()方法 一个一个setAttribute()方法

编写如下js,将会创建一个svg空间

代码语言:txt
AI代码解释
复制
	// 创建一个XML命名空间
	var svgns = "http://www.w3.org/2000/svg";

	// 创建一个SVG元素指定大小和坐标
	var chart = document.createElementNS(svgns, "svg:svg");	// 创建在svgns命名空间里的svg元素
	// 设置节点的属性
	chart.setAttribute("width", "100%");
	chart.setAttribute("width", "300px");
	// 设置视口大小
	chart.setAttribute("viewBox", "0 0 100% 300px");

关于document.createElementNS 和 document.getElement的区别 以及命名空间

命名空间

解决的问题:由于仅仅只有三个字母带来的版本的混乱等等问题。

使用命名空间可以完整的区分一些不同。一些版本上带来的不同

关于两者

一个是xml一个是html

一个属于操作xml的内容,一个属于操作html的内容。

举个栗子

代码语言:txt
AI代码解释
复制
document.createElementNS("p","edition");

创建了一个在p命名空间下的edition节点。

使其作为body元素的子节点

代码语言:txt
AI代码解释
复制
var e = document.createElementNS("p","edition");
var body = document.getElementsByTagName("body");
body.appendChild(e);

关于路径path

SVG中的path的d属性的椭圆弧曲线

目的是为了绘制饼状图

参数

一共有7个参数,以下按照顺序依次解释

rx ry

代码语言:txt
AI代码解释
复制
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
	<path d="
		M20 20
		A6 6 0 1 0 40 20
	"/ stroke="#c9d6d5" fill="none">
</svg>

此时有一个起始位置,一个终止位置,一个x轴,一个y轴

大弧小弧的问题

是使用较长的弧线,还是较短的弧线。

一直以为是两个弧线相切晕

sweep-flag

顺时针,还是逆时针,即选择弧线,以后顺时针旋转还是逆时针旋转。

计算弧度

有如下数据

项目

百分比

A

20%

B

40%

C

10%

D

30%

分为四项,然后计算

如果数据为原始的楔,可以计算出相应的百分比,

复习一下弧度 全部忘光了, 一个完整的圆的弧度为2π,半个圆为π。

计算各自需要的弧度。

20% * 2π 即可得出当前的弧度,依次运算出弧度即可

分别计算如下

项目

弧度数

A

0.4π

B

0.8π

C

0.2π

D

0.6π

计算圆弧的x和y

x使用sin y使用cos

计算分别的x和y,由于已经拥有r需要确认起点

其中r为10,需要加上圆心坐标(20,20)

项目

x

y

A

20

20-10=10

这里需要注意坐标系的不同

此时

代码语言:txt
AI代码解释
复制
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
	<path d="
		M20 20
		L20 10
	"/ stroke="#c9d6d5" fill="none">
</svg>

如图

至于为什么要用sin和cos,是由于以12点钟方向为准的。如果以极坐标为准,即x轴正方向为准的,如下

接着计算结束坐标

同样的带入计算

项目

x

y

A

29

16

代码语言:txt
AI代码解释
复制
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
	<path d="
		M20 20
		L20 10
		A10 10 0 0 1 29 16
	"/ stroke="#c9d6d5" fill="none">
</svg>

结束

加Z

代码语言:txt
AI代码解释
复制
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
	<path d="
		M20 20
		L20 10
		A10 10 0 0 1 29 16 Z
	"/ stroke="#c9d6d5" fill="none">
</svg>
<script>

设置画笔宽度,填充颜色,线条颜色

代码语言:txt
AI代码解释
复制
stroke="#7a7a7a" fill="#c9d6d5" stroke-width="1"

如图

完整如下

代码语言:txt
AI代码解释
复制
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
	<path d="
		M20 20
		L20 10
		A10 10 0 0 1 29 16 Z
	"/ stroke="#7a7a7a" fill="#c9d6d5" stroke-width="1">
</svg>

接着重复计算,应该是使用js,将其封装为一个函数,输入圆心坐标,传入数组即可的。

上方最难的在于sin和cos的问题

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
HTML5(八)——SVG 之 path 详解
path 是 SVG 基本形状中最强大的一个,不仅可以实现我们上一篇《HTML5(七)——SVG基础入门》中,介绍的 SVG 预定义的 line、rect、circle、ellipse、line、polyline、polygon 六种基本形状。还可以实现更复杂的效果,我们就开始学习 path 如何应用。
呆呆
2021/09/30
3.2K0
SVG
HTML体系中,最常用的绘制矢量图的技术是SVG和HTML5新增加的canvas元素。这两种技术都支持绘制矢量图和光栅图。不过canvas更偏重于动画的制作。所以,绘制矢量图的大任落到了SVG身上。
踏浪
2019/07/31
5.7K0
SVG
SVG基础知识 Adobe Illustrator绘制SVG
此外还有阴影渐变,等滤镜,等就太复杂了,设计到矩阵变换等高等数学的内容,自己有心无力。
mySoul
2018/10/13
2.8K0
SVG图形绘制入门第一弹
之前很长一段时间,我是不重视SVG的,认为他就是在AI里画画,然后导出来做个矢量图标。直到我在上家公司遇到图表的绘制,因为不会写不得已而拿插件实现,而插件绘制的SVG代码又因为看着非常吃力甚至看不懂,导致自己严重受挫。到那个时候我才从基础正式开始学习SVG。 关于SVG的文章和教程网络上有很多,我这一系列的ABC其实是我自己的一个学历历程 ,对于高手应该没有太大的帮助,对于还没有怎么写过的同学,可以一起开始学习。 首先先来认识一下SVG: SVG可缩放矢量图形(Scalable Vector Graphi
练小习
2018/01/15
3.2K3
将 SVG 与媒体查询结合使用
在 HTML 文档中,我们可以根据视口的条件显示、隐藏或重新排列页面的某些部分。例如,如果浏览器窗口的宽度为 480 像素,我们可能会将导航从水平导航移动到垂直可折叠列表。将 SVG 与媒体查询一起使用时,我们可以做类似的事情。
玖柒的小窝
2021/09/12
6.3K0
将 SVG 与媒体查询结合使用
Power BI高级交互:比较两元素的差异
把度量值中的维度和指标替换为你模型中的数据,放入HTML Content视觉对象使用。
wujunmin
2025/04/04
960
Power BI高级交互:比较两元素的差异
SVG画图:画一个腾讯云logo
首先来了解一下什么是 SVG,SVG(Scalable Vector Graphics)是一种基于 XML 的图像格式,用于描述二维矢量图形。这种格式具有高度的可伸缩性和分辨率独立性,意味着 SVG 图像可以在不失真的情况下放大或缩小,非常适合用于网页设计、移动应用、数据可视化等领域。
yichen
2024/04/05
3170
SVG画图:画一个腾讯云logo
如何使用JavaScript向现有SVG中添加元素?
在日常开发中,特别是前端开发中,我们经常会遇到需要动态修改页面内容的场景。比如在一个已经存在的SVG图形中,想要通过JavaScript添加新的图形元素。对于初学者来说,这听起来可能有些复杂,但实际上掌握了基本方法后,你会发现这并不难。
前端达人
2024/11/25
3510
如何使用JavaScript向现有SVG中添加元素?
一篇文章带你了解SVG stroke属性
将笔划宽度设置为3个像素。您可以使用不同于像素的单位。在[SVG坐标系统单位中查看所有可用单位。
前端进阶者
2021/03/03
1.3K0
一篇文章带你了解SVG stroke属性
SVG学习笔记,持续记录。
SVG是一种用XML定义的语言,用来描述二维矢量及矢量/栅格图形。SVG提供了3种类型的图形对象:矢量图形(vectorgraphicshape,例如:由直线和曲线组成的路径)、图像(image)、文本(text)。图形对象还可进行分组、添加样式、变换、组合等操作,特征集包括嵌套变换(nestedtransformations)、剪切路径(clippingpaths)、alpha蒙板(alphamasks)、滤镜效果(filtereffects)、模板对象(templateobjects)和其它扩展(extensibility)。
房东的狗丶
2023/02/17
3K0
SVG学习笔记,持续记录。
SVG 图像入门教程
SVG 是一种基于 XML 语法的图像格式,全称是可缩放矢量图(Scalable Vector Graphics)。其他图像格式都是基于像素处理的,SVG 则是属于对图像的形状描述,所以它本质上是文本文件,体积较小,且不管放大多少倍都不会失真。
ruanyf
2018/08/09
1.9K0
SVG 图像入门教程
SVG基础知识速查笔记
svg是指可缩放矢量图形,是用于描述二维矢量图形的一种图形格式。svg使用XML格式来定义图形,除ie8之前版本外,绝不部分浏览器均支持svg,可将svg文本直接嵌入HTML中显示。
前端_AWhile
2019/09/06
2K0
Web版Scada实现管道流水/电机转动最简单的方式
这段代码实现的功能是在SVG画布上绘制一条橙色的虚线,并且让这条虚线不断地重复移动。代码步骤解释:
科控物联
2024/04/12
3920
Web版Scada实现管道流水/电机转动最简单的方式
可视化初探上
作为前端工程师,很多人的主要工作就是和网页打交道。那扪心自问一下,写了这么多网页之后,你是不是也想要做些尝试或者突破呢?如果是的话,我建议大家试试可视化。
年少轻狂12138
2022/08/10
1.7K1
可视化初探上
D3.js-基础知识
数据可视化起源于18世纪,当时使用柱形图和折线图来表示国家进出口量。近年,随着大数据时代的到来,数据可视化作为大数据量的呈现方式,成为当前重要的课题。数据可视化的目的,是要对数据进行可视化处理,以使得能够明确地、有效地传递信息。
奋飛
2019/08/15
2.2K0
SVG可伸缩的矢量图形
SVG是对画该图形时的一些路径,做出精准的,必要的与分辨率无关的一种描述。即对矢量图的描述
mySoul
2018/10/11
1.1K0
SVG绘图表格统计
用SVG绘图写一个表格统计的效果,类似于百度图表工具Echarts实现的效果。 实现效果如下: 实现代码如下: <!DOCTYPE html> <html> <head lang="zh-cn">
越陌度阡
2020/11/26
1K0
SVG绘图表格统计
SVG 快速入门
本文作者:ivweb villainthr SVG 全称是 Scalable Vector Graphics,即,矢量图。在 Web 中使用 SVG 可以解决位图放大失真的问题。首先,不要把 SVG
腾讯IVWEB团队
2017/07/11
3.1K5
SVG 快速入门
JS控制SVG缩放+鼠标控制事件
直接撸代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>js控制SVG缩放</title> </head> <body> <svg id="svg" style="background-color: #FAFAFA;"> <g id="svgPanel"> <g id="grid"></g> <defs>
青梅煮码
2023/03/13
24.7K0
Arcgis for JavaSctipt之常用Layer详解
概述:Arcgis for Javasctipt中常见的layer有动态图层(ArcGISDynamicMapServiceLayer
牛老师讲GIS
2018/10/23
1.4K0
Arcgis for JavaSctipt之常用Layer详解
相关推荐
HTML5(八)——SVG 之 path 详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档