第一篇博客 赶鸭子上架的d3.js学习笔记(bilibili从零开始画图表学习笔记 感谢万能的b站以及up睿小狼d)
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)相关推荐
- 我的名义上的第一篇博客
我的名义上的上的第一篇博客 自我介绍 关于我编程的目标 我打算怎么学习编程? 我打算在学习编程这件事上每周花费多少时间? 你最想进入的一家IT公司 自我介绍 19岁,男,现在在郑州轻工业大学读大一,热 ...
- 第一篇博客,用以规划我的编程人生
本人编程小白.第一次写技术博客,希望制定一个学习计划,让自己慢慢成长为一名优秀的程序猿. 学习方向是成为一名全栈工程师. 前端方面:会用bootstrap设计网页,会用jQuery完成动作. 后端方面 ...
- 第一篇博客,与您共勉
第一篇博客,与您共勉 提示:点击右上角关注博主,收获共同话题 大家好,好男人就是我,我就是小陈同学.下面是我的个人相关简介: 文章目录 第一篇博客,与您共勉 个人介绍 学习的一些计划: 最后 个人介绍 ...
- 蒟蒻的第一篇博客CF1041C Coffee Break(二分+贪心+set)
CF1041C Coffee Break(二分+贪心+set) 描述 Recently Monocarp got a job. His working day lasts exactly mm min ...
- 这是我的第一篇博客!
这是我的第一篇博客~ 这个博客账号将会由一个技术菜鸡来总结一些我学习的东西,也许会总结的乱七八糟,也许会错误频频,甚至看不懂在写个什么(emmm有点过分)...但是无所谓啦,目的只是希望以后能向各路大 ...
- 点滴篇(一) 第一篇 博客
我的第一篇博客~~~ 这个博客就为技术贴吧,以后我会分享自己在学习中的点点滴滴
- Python中的TCP的客户端UDP学习----第一篇博客
Python中的TCP的客户端&UDP学习--第一篇博客 PS: 每日的怼人句子"我真想把我的脑子放到你的身体里,让你感受一下智慧的光芒" 先说UDP流程 发送: 创建套接 ...
- “Hello, my first blog”------第一篇博客的仪式感
本人在校大学生一枚,开通博客,主要是想记录自己的学习过程,分享自己的学习经历.记得大一的时候,很多不懂的操作和知识,都是在博客上找到了相应的解决办法.但比较讽刺的是,很多时候,曾经解决了的问题,当再次 ...
- 第一篇博客《import tensorflow的问题解决》
第一篇博客<import tensorflow的问题解决> 参考文章: (1)第一篇博客<import tensorflow的问题解决> (2)https://www.cnbl ...
最新文章
- 架构与思维:设计容量,到底有多重要 ?
- mysql报错:Reading table information for completion of table and column names
- 2019南昌网络赛-I(单调栈+线段树)
- 欧锦赛球星谱:帕克领豪阵 诺天王对决加索尔
- 重磅推荐《南瓜书》:周志华《机器学习》的代码实现
- 1-2.Win10系统利用Pycharm社区版安装Django搭建一个简单Python Web项目的步骤之二
- 前端代码:html、css(图文混排)文字环绕 - 案例篇
- Delphi创建对象时,Application、Self、nil三者的区别
- jsp文件创建后自动设置其pageEncoding的属性值为UTF-8
- 芯片数据分析笔记【01】 | 基因芯片的基本原理
- 关于JSP文件的运行方法
- Excel技能之查找筛选排序,同事竖起大拇指
- APP优化 启动速度优化
- 大漠插件最新版7.2248
- iS-RPA 从起步到飙速(一)—— 遇见新世界
- 考研计算机报录比最高的手机,考研 | 报录比最高专业TOP10,就离谱!
- 少年得志中年入狱,李一男能再造一个“四轮的小牛”吗?
- 基于超像素的多视觉特征图像分割算法研究
- Linux----cut命令详细使用方法
- Shiro中的Realms