数据可视化-svg入门基础(二)
接上一篇:数据可视化-svg入门基础(一),基础一主要是介绍了svg概念,元素样式设置等。
svg是(scalable vector graphic)伸缩矢量图像。
一、目录
(1)图形元素
(2)文字元素
(3)特殊元素
(4)滤镜元素
(5)渐变元素
二、图形元素
1、矩形
矩形使用<rect></rect>标签来进行绘制。
示例图:
代码:
<svg width="200" height="200">
<rect x="10" y="10" width="100" height="100" rx="5" ry="5" fill="yellow"></rect>
</svg>
参数说明:
(1)x:左上角x的坐标,距离左边的距离,相当于margin-left;
(2)y:左上角y的坐标,距离顶部的距离,相当于margin-top;
(3)width:矩形的宽度;
(4)height:矩形的高度;
(5)rx:圆角矩形,x轴方向的半径;
(6)ry:圆角矩形,y轴方向的半径
(7)fill:填充颜色
2、圆形
圆形使用<circle></circle>标签来进行绘制。
示例图:
实例代码:
<svg width="200" height="200">
<circle cx="50" cy="50" r="40" fill="yellow"></circle>
</svg>
参数说明:
(1)cx:圆形的x坐标;
(2)cy:圆心的y做标;
(3)r:半径
3、椭圆形
椭圆形使用标签<ellipse></ellipse>标签进行绘制,与圆形的绘制方法类似。
示例图:
实例代码如下:
<svg width="200" height="200">
<ellipse cx="50" cy="50" rx="40" ry="20" fill="yellow"></ellipse>
</svg>
参数说明:
cx:圆心的x坐标;
cy:圆心的y坐标;
rx:水平方向上的半径;
ry:垂直方向上的半径
4、线段
线段使用<line></line>标签进行绘制。
实例代码
<svg width="200" height="200">
<line x1="10" y1="10" x2="90" y2="90" stroke="yellow"></line>
</svg>
参数说明:
x1:起点的x坐标;
y1:起点的y坐标;
x2:终点的x坐标;
y2:终点的y坐标
5、折线和多边形
折线和多边形的绘制方法类似,都是用points属性设置各个点的坐标。
折线使用标签<polyline></polyline>进行绘制,而多边形使用标签<polygon></polygon>进行绘制,且多边形会将起点和终点连接起来,折线不会。
示例图:
实例代码:
/* 图一 折线,不会将起点与终点连接 */
<svg width="200" height="200">
<polyline points="50,10 80,90 10,30 90,30 20,90" stroke="#fb3" stroke-width="3" fill="transparent"></polyline>
</svg>
/* 图二 多边形,将起点与终点连接 */
<svg width="200" height="200">
<polygon points="50,10 80,90 10,30 90,30 20,90" stroke="#fb3" stroke-width="3" fill="transparent"></polygon>
</svg>
参数说明:
ponits:设置各个点的坐标,各组坐标之间使用空格分隔,x坐标和y坐标之间使用逗号分开。
6、路径
路径使用标签<path></path>进行绘制,使用d属性控制路径的类型和绘制。路径的功能最多,前面的所有图形都可以使用路径进行绘制。
d属性值的书写有两种,使用逗号分隔坐标,如:d="M10, 10",也可以使用空格的形式,如:d="M 10 10"
注意:大写字母:表示坐标系中使用绝对坐标,小写字母:使用相对坐标(相对当前画笔所在的点)
6.1移动类参数
M:moveto,将画笔移动到指定坐标,如:d="M10,10",表示将画笔移动到坐标(10,10)的位置。
示例图:
实例代码:
<svg width="200" height="200">
<path d="M 10 10 L 180 180" stroke="#fb3" stroke-width="4" fill="transparent"></path>
</svg>
6.2绘制直线类参数
L:lineto,绘制直线到指定坐标,如:d="M 10 10 L 80 80",表示绘制一条起点坐标为(10,10),终点坐标为(80,80)的直线。
H:horizontal lineto,绘制水平直线到指定坐标,如:d="M 10 10 H 100",表示是绘制一条起点坐标为(10,10),终点坐标为(100,10)的直线,注意:H只需要设置一个值,如果设置了多个值,则最后取最后一个值。
V:vertical,绘制垂直直线到指定坐标,如:d="M 10 10 V 100",表示绘制一条起点坐标(10,10),终点坐标为(10,100)的直线,注意:V只需要设置一个值,如果是多个值,则取最后一个值。
6.3绘制曲线类参数
C:curveto,绘制三次方贝塞尔曲线到终点坐标,中间经过两个控制点控制曲线的弧度,所以需要制定三个坐标来实现绘制曲线,如:d="M10,10 C40,5 40,140 100,100"
S:shorthand/smooth curveto,绘制平滑三次方贝塞尔曲线到终点坐标,与上一条三次方贝塞尔曲线相连,第一个控制点为上一条曲线第二个控制点的对称点,所以还需制定一个控制点坐标和终点坐标。如:d="M10,10 C40,5 40,140 100,100 S140,180 160,160",如果不与贝塞尔曲线相连,即:d="M10,10 S140,180 160,160"
,则绘制的图线接近于二次贝塞尔曲线
Q:quadratic Bezier curveto,绘制二次贝塞尔曲线到终点坐标,中间经过一个控制点控制曲线的弧度,如:d="M10,10 Q40,140 100,100"
T:shorthand/smooth quadratic Bezier curveto,绘制平湖二次贝塞尔曲线到终点坐标,与上一条二次贝塞尔曲线相连,控制点为上一条曲线控制点的对称点,所以还需指定一个终点坐标,如:d="M10,10 Q40,140 100,100 T160,160"
,如果不与贝塞尔曲线相连,即:d="M10,10 T160,160"
,则绘制的图线是一条直线。
示例图:
实例代码:
/* 图一 三次方贝塞尔曲线 */
<svg width="200" height="200">
<path d="M10,10 C40,5 40,140 100,100" stroke="#fb3" stroke-width="4px" fill="transparent"></path>
</svg>
/* 图二 三次方贝塞尔曲线,与上一条曲线相连 */
<svg width="200" height="200">
<path d="M10,10 C40,5 40,140 100,100 S140,180 160,160" stroke="#fb3" stroke-width="4px" fill="transparent"></path>
</svg>
/* 图三 二次贝塞尔曲线 */
<svg width="200" height="200">
<path d="M10,10 Q40,140 100,100" stroke="#fb3" stroke-width="4px" fill="transparent"></path>
</svg>
/* 图四 二次方贝塞尔曲线,与上一条曲线相连 */
<svg width="200" height="200">
<path d="M10,10 Q40,140 100,100 T160,160" stroke="#fb3" stroke-width="4px" fill="transparent"></path>
</svg>
6.4绘制弧线类参数
A:el liptical arc,绘制椭圆曲线到指定坐标,需设置的参数有:
(1)rx,ry:x轴方向半径,y轴方向半径;
(2)x-axis-rotation:x轴与水平顺时针方向夹角;
(3)large-arc-flag:角度弧线大小(1:大,0:小);
(4)sweep-flag:绘制方向(1:顺时针,0:逆时针);
(5)x y:终点坐标
示例图:
实例代码:
<svg width="500" height="500">
<path d="M50,50 A60 30 0 1,0 150,50 Z" stroke="#fb3" stroke-width="4px" fill="transparent"></path>
</svg>
分析:起点坐标(50,50),终点坐标(150,50),角度为0,角度弧线大小large-arc-flag为1,选择大弧度,根据分析,即选择红色的弧线,又绘制方向sweep-flag为0,为逆时针,即从起点沿着逆时针方向绘制到终点,所以是红色虎先位于下方。
注意:当 (起点与终点之间的直线距离/2) > (椭圆的水平半径) 时,角度为0的情况下,此时椭圆会等比放大,到相等为止。
6.5闭合类参数
Z:closepath,绘制直线将终点与起点连接
再次提醒:大写字母:表示坐标系中使用绝对坐标,小写字母:使用相对坐标(相对当前画笔所在的点)
三、文字元素
1、基础
在svg中使用<text></text>标签绘制文字。
参数说明:
x:文字的x坐标;
y:文字的y坐标;
dx:相对于当前位置x方向的距离;
dy:相对于当前位置的y方向的距离;
textLength:文字的显示长度;
rotate:旋转角度,也可以使用transform="rotate(30)"
示例图:
实例代码:
<svg width="200" height="200">
<text x="10" y="10" dx="10" dy="10" textLength="100" rotate="20">示例文字</text>
</svg>
2、文本路径
如果要实现文字沿着路径进行排列,可使用<textPath></textPath>标签来实现。需要提前定义好路径path,并指定id,textPath使用xlink:href定义文字要匹配的路径。
示例图:
实例代码:
<svg width="600" height="600">
<path id="textPath1" d="M100,100 C140,50 140,240 200,200 S240,280 360,360" stroke="#fb3" stroke-width="4px" fill="transparent"></path>
<text x="10" y="10" dx="-10" dy="-10" rotate="20">
<textPath xlink:href="#textPath1" textLength="300">
很扭曲的测试示例文字
</textPath>
</text>
</svg>
四、特殊元素
1、克隆元素use
use
标签用来克隆其他元素,克隆后的元素不能修改样式。 示例图:
示例代码:
<svg>
<rect id="rect1"
x="10" y="10" width="100" height="100"
stroke="#5588aa" stroke-width="5"
fill="transparent"
></rect>
<use x="20" y="20" xlink:href="#rect1"></use>
</svg>
参数说明:
x:相对被克隆元素x轴偏移量;
y:相对被克隆元素y轴偏移量;
xlink:href:指向被克隆元素的ID
2、模板元素symbol
symbol
标签用定义模版,需要结合use
标签使用,模版在未被使用之前,不会展示在页面上。模版内部可包含多个元素
示例代码:
<svg>
<symbol id="template1">
<rect x="10" y="10" width="100" height="100"
stroke="#5588aa" stroke-width="5"
fill="transparent"
></rect>
</symbol>
<use x="20" y="20" xlink:href="#template1"></use>
</svg>
3、组元素g
group
的简写,用来创建分组,组内所有的元素都会继承g
的属性,可以嵌套使用,也可以和use
标签结合使用。另外可使用transform属性定义控制整个组的位置。
示例代码:
<svg>
<g stroke="#5588aa" stroke-width="5" fill="transparent">
<rect x="10" y="10" width="100" height="100"></rect>
<rect x="120" y="120" width="100" height="100"></rect>
</g>
</svg>
g
标签内部的两个矩形,都会继承g
标签的样式。
4、clipPath裁剪元素
lipPath
元素主要用来剪裁元素,clipPath
元素定义范围外的内容将不会被展示。另外要注意写在<clipPath></clipPath>
标签内部的元素不会被显示,clipPath标签需要放在defs标签内。其他元素在引用clipPath元素时,需要使用clip-path="url(#ID)"
。
示例代码:
<svg height="200" width="200">
<defs>
<clipPath id="clip">
<rect width="100" height="100"></rect>
</clipPath>
</defs>
<circle cx="90" cy="90" r="90" clip-path="url(#clip)" stroke="none" fill="yellow" />
</svg>
分析图:
最终效果图:
数据可视化-svg入门基础(二)的更多相关文章
- 数据可视化之powerBI基础(十二)PowerBI导入Excel数据有哪几种方式?
https://zhuanlan.zhihu.com/p/64999937 Excel作为使用最频繁.应用最广泛.用户最庞大的数据处理工具,当然也应该是PowerBI最常用的数据获取方式,本文介绍一下 ...
- 数据可视化(7)--D3基础
一直想写写D3,觉得D3真心比较强大,基本上你能想出来的图表都能绘制出来,只不过使用起来比前几个要稍麻烦一点. 正好最近读完了<数据可视化实战>,将关于D3的知识梳理了一遍,写这篇博客记录 ...
- mybatis入门基础(二)----原始dao的开发和mapper代理开发
承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...
- python数据可视化-matplotlib入门(7)-从网络加载数据及数据可视化的小总结
除了从文件加载数据,另一个数据源是互联网,互联网每天产生各种不同的数据,可以用各种各样的方式从互联网加载数据. 一.了解 Web API Web 应用编程接口(API)自动请求网站的特定信息,再对这些 ...
- 数据可视化系列--svg入门基础(一)
一.前言 1.SVG(Scalable Vector Graphics)可伸缩矢量图形 特点: (1)使用xml格式来定义图形: (2)用来定义web上的使用的矢量图: (3)改变图像尺寸,图片质量不 ...
- 数据可视化之powerBI基础(二)PowerBI动态图表技巧:钻取交互
https://zhuanlan.zhihu.com/p/64406366 查看可视化图表的时候,我们可能想深入了解某个视觉对象的更详细信息,或者进行更细粒度的分析,比如看到2017年的总体数据,同时 ...
- 数据可视化之powerBI基础(二十)Power BI度量值和新建表,有什么异同?
https://zhuanlan.zhihu.com/p/101812525 PowerBI中,有三个地方可以使用DAX,分别是度量值.新建列和新建表,这三个功能并成一排摆放在这里,如图所示, 之前 ...
- 数据可视化之powerBI基础(十一)Power BI中的数据如何导出到Excel中?
https://zhuanlan.zhihu.com/p/64415543 把Excel中数据加载到PowerBI中我们都已经熟悉了,但是怎么把在PowerBI中处理好的数据导出到Excel中呢?毕竟 ...
- 数据可视化之powerBI基础(九)Power BI中的“新表”,你会用吗?
https://zhuanlan.zhihu.com/p/64413703 通常情况下,在PowerBI进行分析的各种数据表都是从外部的各种数据源导入进来的,但并不总是如此,某些情况下在PowerBI ...
随机推荐
- IOS UIWebView 随记
UIWebView中加载的网页尺寸太大,如何让网页适应屏幕大小 webview.scalesPageToFit = YES;
- Asp.Net Core 初探 (三)
昨天失败的生产环境部署就先放着,明天再解决! 今天利用中午的空余时间看了一下Asp.net core 的Areas . 相对于Asp.net MVC5 以及之前的版本,asp.net core 的Ar ...
- PHP收邮件receiveMail
用PHP来发邮件,相信大家都不陌生,但读取收件箱的话,接触就少了,这次总结下自己的经验,希望能够帮助大家. 注意:1.PHP读取收件箱主要是利用imap扩展,所以在使用下面方法前,必须开启imap扩展 ...
- C# wince 实现软件忙鼠标状态改变
eg: Cursor.Current = Cursors.WaitCursor; dosomething(); Cursor.Current = Cursors.Default; Cursor.Cur ...
- [转]***换机房换ip之后不能连外网
***换机房换ip之后不能连外网 时间 2015-07-21 15:17:16 Wendal随笔 原文 http://wendal.net/2015/07/21.html 主题 iptables ...
- spring 集成 mybatis 后数据源初始化失败问题分析
问题背景: 项目使用spring,springmvc框架,后边需操作关系数据库,选择了mybatis + durid,集成mybatis后,项目一直启动失败.错误的原因是dataSource初始化的时 ...
- python2&python3的区别
区别1. python3中>>>range<3,6>range<3,6> python2中>>>range<3,6>[3,4,5 ...
- 九度OJ 1127:简单密码 (翻译)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1218 解决:721 题目描述: Julius Caesar曾经使用过一种很简单的密码. 对于明文中的每个字符,将它用它字母表中后5位对应的 ...
- java XML-RPC
1.XML-RPC简介 xml rpc是使用http协议做为传输协议的rpc机制,使用xml文本的方式传输命令和数据.一个rpc系统,必然包括2个部分:1.rpc client,用来向rpc serv ...
- 怎样把word直接转换成ppt