svg:

可缩放矢量图形是基于可扩展标记语言(标准通用标记语言的子集),用于描述二维矢量图形的一种图片格式。他由万维网联盟制定,是一个开放标准。(源代码类似于html)

一个简单的代码

<svg xmlins="gttp://www.w3.org/2000/svg" width="600" height = "600" version="1.1">

第一句:规定了画布的宽和高以及svg版本(一般为1.1),地址是规范地址。一般第一行不变。

开始描绘具体图形:

<rect width="200" height = "100" x = "20"  y="20" style="fill:red;stroke: blue;stroke-width:4"/>
<rect height="100" width="200" x="250"y="20"  rx = "200"  ry="100" style="fill:red;stroke: blue;stroke-width:4"/>

reck:矩形  有宽高,x,y坐标,样式  fill填充  stroke 边框   stroke:边框宽度  r代表radiu(弧度),

x的弧度(rx)和width同时为椭圆,小于width为圆角矩形(y同)

 <circle cx="100" cy="200" r="80" style="fill:yellow"/>

circle:圆  cx:x坐标,cy:y坐标 r:半径

<ellipse cx="330" cy="280" rx="100" ry="80" style="fill:yellow"/>

ellipse:椭圆  cx:x的半径   cy:y的半径

<line x1="0" x2="500"y1="0" y2="360" style ="stroke:#000;stroke-width:4"/>

line:直线:x1,y1  起始点坐标   x2,y2 终止点坐标

 <polygon points="100,20 20,90 20,200"style="fill:green;stroke:orange;stroke-width: 4"/>

polygon:封闭的多边形   直接给出端点的坐标(此例为三角形)

 <polyline points="100,20 20,90 20,200"style="fill:green;stroke:orange;stroke-width: 4" transform="tranlate"/>

polyline:只划线,不封闭

 <text x="200" y="150" style="fill:purplr" textlength ="90">SVG SVG<tspan fill="red">D3.js</tspan></text>

text:文字  并用tspan为部分文字加样式(文本可以被选中)

  <path d="M250 150 L150 350 L350 350 Z"/>
<path d="M250 150 L150 350 L350 350 Z"/><path d="M153 334C153 334 151 334 151 334C151 339 153 344 156 344C164 344 171 339 171 334C142 314 131 322 131 334C131 350 162 364 156 364"style="fill:white;stroke:red;stroke-width: 2"/>

第一个path效果:形成一个三角形

第二个 :“某个螺旋形”

path的指令

M = moveto 移动到

L = lineto 画线到

H = horizontal lineto 水平线到

V = vertical lioto 垂直线到

C = curveto 三次贝塞尔曲线到

S = smooth curveto 光滑三次贝塞尔曲线到

Q = qudratic Belzier curve 二次贝塞尔曲线到

T = smooth quadratic Belzier curve 光滑二次贝塞尔曲线到

A = elliptical Arc 椭圆弧

Z = closepath 关闭路径

d3(Data-Driven DOculusments)

最新版本v4

用d3画直方图(简单代码)

const dataset=[50,43,120,87,99,167,142];

首先定义一个数据集(一般由服务器提供)

    const height = 400;const width = 400;

其次,创造一个svg,定义他的宽和高

const svg = d3.select("#svg").append("svg").attr("height",height).attr("width",width);

这是一个选择器,选择了id为svg的元素,往里面append一个svg元素(添加svg图形),设置svg的宽和高

svg此时已经生成,只不过是空白

 const padding = {top:20,left:20, right:20,bottom:20}

样式设置---加边距以免接触到边界

    const rectStep = 35;const rectWidth = 30;

每个矩形所占宽度和真实的宽度(间距为rectStep-rectWidth=5)

下面开始画图形
svg.selectAll("rect").data(dataset).enter().append("rect").attr("fill","red").attr("x",(d,i)=>padding.left + i*rectStep).attr("y",(d,i)=>height-padding.bottom-d)

seleteAll选择所有的矩形元素,data方法绑定数据,调用enter方法(现在没有rect元素,selectAll查不到,绑定数据为空。enter会使多把数据生成新的rect)生成rect并填充元素

attr的第二个参数可为函数,有两个默认参数,在这里面通过几何计算方法算出出x和y坐标应在的位置再返回就可以了(比例尺更灵活,后面再学)

 .attr("width",rectWidth).attr("height",d=>d);

定义矩形的宽度和高度

往直方图上添加文字
 const text=svg.selectAll("text").data(dataset).enter().append("text").attr("fill","#fff").attr("font-size","14px").attr("text-anchor","middle")

与画矩形的第一步类似,为每个矩形生成并绑定text,添加基本的样式

.attr("x",(d,i)=>padding.left + i*rectStep)
.attr("y",(d,i)=>height-padding.bottom-d)

添加锚点

 .text(d=>d)

画出文字(赋值为数据值)

 .attr("dx",rectWidth/2).attr("dy","1em");

此时要注意文字的锚点是他的中心,所以需要后期的修正(通过偏移修正位置)

第一篇博客 赶鸭子上架的d3.js学习笔记(bilibili从零开始画图表学习笔记 感谢万能的b站以及up睿小狼d)相关推荐

  1. 我的名义上的第一篇博客

    我的名义上的上的第一篇博客 自我介绍 关于我编程的目标 我打算怎么学习编程? 我打算在学习编程这件事上每周花费多少时间? 你最想进入的一家IT公司 自我介绍 19岁,男,现在在郑州轻工业大学读大一,热 ...

  2. 第一篇博客,用以规划我的编程人生

    本人编程小白.第一次写技术博客,希望制定一个学习计划,让自己慢慢成长为一名优秀的程序猿. 学习方向是成为一名全栈工程师. 前端方面:会用bootstrap设计网页,会用jQuery完成动作. 后端方面 ...

  3. 第一篇博客,与您共勉

    第一篇博客,与您共勉 提示:点击右上角关注博主,收获共同话题 大家好,好男人就是我,我就是小陈同学.下面是我的个人相关简介: 文章目录 第一篇博客,与您共勉 个人介绍 学习的一些计划: 最后 个人介绍 ...

  4. 蒟蒻的第一篇博客CF1041C Coffee Break(二分+贪心+set)

    CF1041C Coffee Break(二分+贪心+set) 描述 Recently Monocarp got a job. His working day lasts exactly mm min ...

  5. 这是我的第一篇博客!

    这是我的第一篇博客~ 这个博客账号将会由一个技术菜鸡来总结一些我学习的东西,也许会总结的乱七八糟,也许会错误频频,甚至看不懂在写个什么(emmm有点过分)...但是无所谓啦,目的只是希望以后能向各路大 ...

  6. 点滴篇(一) 第一篇 博客

    我的第一篇博客~~~ 这个博客就为技术贴吧,以后我会分享自己在学习中的点点滴滴

  7. Python中的TCP的客户端UDP学习----第一篇博客

    Python中的TCP的客户端&UDP学习--第一篇博客 PS: 每日的怼人句子"我真想把我的脑子放到你的身体里,让你感受一下智慧的光芒" 先说UDP流程 发送: 创建套接 ...

  8. “Hello, my first blog”------第一篇博客的仪式感

    本人在校大学生一枚,开通博客,主要是想记录自己的学习过程,分享自己的学习经历.记得大一的时候,很多不懂的操作和知识,都是在博客上找到了相应的解决办法.但比较讽刺的是,很多时候,曾经解决了的问题,当再次 ...

  9. 第一篇博客《import tensorflow的问题解决》

    第一篇博客<import tensorflow的问题解决> 参考文章: (1)第一篇博客<import tensorflow的问题解决> (2)https://www.cnbl ...

最新文章

  1. 架构与思维:设计容量,到底有多重要 ?
  2. mysql报错:Reading table information for completion of table and column names
  3. 2019南昌网络赛-I(单调栈+线段树)
  4. 欧锦赛球星谱:帕克领豪阵 诺天王对决加索尔
  5. 重磅推荐《南瓜书》:周志华《机器学习》的代码实现
  6. 1-2.Win10系统利用Pycharm社区版安装Django搭建一个简单Python Web项目的步骤之二
  7. 前端代码:html、css(图文混排)文字环绕 - 案例篇
  8. Delphi创建对象时,Application、Self、nil三者的区别
  9. jsp文件创建后自动设置其pageEncoding的属性值为UTF-8
  10. 芯片数据分析笔记【01】 | 基因芯片的基本原理
  11. 关于JSP文件的运行方法
  12. Excel技能之查找筛选排序,同事竖起大拇指
  13. APP优化 启动速度优化
  14. 大漠插件最新版7.2248
  15. iS-RPA 从起步到飙速(一)—— 遇见新世界
  16. 考研计算机报录比最高的手机,考研 | 报录比最高专业TOP10,就离谱!
  17. 少年得志中年入狱,李一男能再造一个“四轮的小牛”吗?
  18. 基于超像素的多视觉特征图像分割算法研究
  19. Linux----cut命令详细使用方法
  20. Shiro中的Realms

热门文章

  1. 诗韵悠然(四十七)到武夷山
  2. SCI期刊投稿额外材料准备
  3. 性价比首选,百元旗舰级骨传导耳机——南卡Runner CC3实战评测
  4. IE设置允许活动内容在我的计算机上的文件中运行
  5. 没朋友(mpvue),点个外卖,一个人也要好好吃饭
  6. Qt笔记(二十六)之判断文件是否存在
  7. RIP的概念与技术指标
  8. 有帅锅知道在Unity里纯用52个骨骼动画表情片段不用BS能实现面部捕捉吗?
  9. 系统管理员对于宝贝的搜索引警
  10. 相关性及相关性的显著性检验