D3入门教程——坐标轴
文章目录
- 一、坐标轴
- 二、使用坐标轴
- 1.定义坐标轴
- 2.添加坐标轴
- 3.设定坐标轴的样式和位置
- 4.完整代码
一、坐标轴
坐标轴在可视化图形中是很重要的一部分,很多图表的展示都需要使用坐标轴,例如:柱形图、折线图。
D3中的坐标轴:
SVG 画布的预定义元素里,有六种基本图形:
- 矩形
- 圆形
- 椭圆
- 线段
- 折线
- 多边形
还有一种比较特殊的存在,也是最强的元素:
- 路径
所以说,在D3种是没有现成的坐标轴组件的,需要我们使用别的方式使用坐标轴。
我们可以使用类似下面的方式:
<g>
<!-- 第一个刻度 -->
<g>
<line></line> <!-- 第一个刻度的直线 -->
<text></text> <!-- 第一个刻度的文字 -->
</g>
<!-- 第二个刻度 -->
<g>
<line></line> <!-- 第二个刻度的直线 -->
<text></text> <!-- 第二个刻度的文字 -->
</g>
...
<!-- 坐标轴的轴线 -->
<path></path>
</g>
分组元素 ,是 SVG 画布中的元素,意思是 group。此元素是将其他元素进行组合的容器,在这里是用于将坐标轴的其他元素分组存放。
如果需要手动添加这些元素就太麻烦了,为此,D3 提供了一个组件:d3.axisBottom(xScale)
。它为我们完成了以上工作。
二、使用坐标轴
1.定义坐标轴
坐标轴通常需要和比例尺一起使用:
//为坐标轴定义一个线性比例尺var xScale = d3.scaleLinear().domain([0, d3.max(dataset)]).range([0, 250]);//定义一个坐标轴var xAxis = d3.axisBottom(xScale)//定义一个axis,由bottom可知,是朝下的.ticks(7);//设置刻度数目
定义坐标轴相关的函数:
- d3.svgAxis():D3 中坐标轴的组件,能够在 SVG 中生成组成坐标轴的元素。
- scale():指定比例尺。
- orient():指定刻度的朝向,bottom 表示在坐标轴的下方显示。
- ticks():指定刻度的数量。
2.添加坐标轴
上面我们定义好了坐标轴,接下来就是将其添加到画布中去。
svg.append("g").call(axis);
上面有一个 call()
函数,其参数是前面定义的坐标轴 axis。
3.设定坐标轴的样式和位置
默认的坐标轴样式不太美观,下面提供一个常见的样式:
<style>
.axis path,
.axis line{fill: none;stroke: black;shape-rendering: crispEdges;
}.axis text {font-family: sans-serif;font-size: 11px;
}
</style>
分别定义了类 axis 下的 path、line、text 元素的样式。接下来,只需要将坐标轴的类设定为 axis 即可。
坐标轴的位置,可以通过 transform 属性来设定。
通常在添加元素的时候就一并设定,写成如下形式:
svg.append("g").attr("class","axis").attr("transform","translate(20,130)").call(axis)
4.完整代码
代码:
<!DOCTYPE html>
<html><head><title>testD3_chp7_2.html</title><script type="text/javascript" src="http://d3js.org/d3.v5.min.js"></script><meta name="keywords" content="keyword1,keyword2,keyword3"><meta name="description" content="this is my page"><meta name="content-type" content="text/html; charset=UTF-8"><!--<link rel="stylesheet" type="text/css" href="./styles.css">--><style>.axis path,.axis line {fill: none;stroke: black;shape-rendering: crispEdges;}.axis text {font-family: sans-serif;font-size: 11px;}</style></head><body><svg width="960" height="600"></svg><script>var marge = { top: 60, bottom: 60, left: 60, right: 60 }// 定义线性比例尺var dataset = [2.5, 2.1, 1.7, 1.3, 0.9];var scaleLinear = d3.scaleLinear().domain([0, d3.max(dataset)]).range([0, 250]);// 定义序列比例尺var index = [0, 1, 2, 3, 4];var color = ["red", "blue", "green", "yellow", "black"];var ordinal = d3.scaleOrdinal().domain(index).range(color);ordinal(0); //返回 redordinal(2); //返回 greenordinal(4); //返回 blackvar svg = d3.select("svg");var g = svg.append("g").attr("transform", "translate(" + marge.top + "," + marge.left + ")");// 设置画布的位置var rectHeight = 30;g.selectAll("rect").data(dataset).enter().append("rect").attr("x", 20).attr("y", function (d, i) {return i * rectHeight;}).attr("width", function (d) {return scaleLinear(d);}).attr("height", rectHeight - 5).attr("fill", function (d) {return ordinal(d); // 这里使用比例尺,来为每个矩形填充颜色});//为坐标轴定义一个线性比例尺var xScale = d3.scaleLinear().domain([0, d3.max(dataset)]).range([0, 250]);//定义一个坐标轴var xAxis = d3.axisBottom(xScale)//定义一个axis,由bottom可知,是朝下的.ticks(7);//设置刻度数目g.append("g").attr("transform", "translate(" + 20 + "," + (dataset.length * rectHeight) + ")").call(xAxis);</script></body></html>
运行结果:
时间:2019年8月18日13:35:05
-END-
D3入门教程——坐标轴相关推荐
- [数据与分析可视化] D3入门教程1-d3基础知识
d3.js入门教程1-d3基础知识 文章目录 d3.js入门教程1-d3基础知识 1 HTML介绍 1.1 什么是HTML? 1.2 自定义文档样式CSS 1.3 构建svg图形 2 d3绘图入门 2 ...
- D3入门教程——做一个简单的图表
文章目录 一.准备 1.什么是画布 1)SVG 2)Canvas 3)两者之前的区别 二.开始 1.添加画布 2.绘制矩形 三.完整代码 一.准备 1.什么是画布 HTML 5 提供两种强有力的&qu ...
- D3.js的v5版本入门教程(第一章)—— 如何在项目中使用D3.js
D3.js的v5版本入门教程(第一章) 1.需要的一些工具 这个其实随便!最简单的就是建一个.txt文件就可以敲起代码来!作者本人用的是myeclipse(主要需要安装tomcat),因为写的是前端, ...
- D3.js的v5版本入门教程(第六章)——做一个简单的图表
D3.js的v5版本入门教程(第六章) 从这一章开始,进入正式的d3,js绘图阶段,有了前面几章基本知识的积累,这样看接下来的绘图代码才不会觉得比较辛苦 做一个简单的图表 为了做一个简单的图表,我们还 ...
- D3.js的v5版本入门教程(第十四章)—— 力导向图
D3.js的v5版本入门教程(第十四章) 这一章我们来绘制一个力导向图,什么叫力导向图,通俗一点将就是有节点和线组成,当鼠标拖拽一个节点时,其他节点都会受到影响(力导向图有多种类型,本章绘制的效果就是 ...
- D3.js的v5版本入门教程(第十三章)—— 饼状图
D3.js的v5版本入门教程(第十三章) 这一章我们来绘制一个简单的饼状图,我们只绘制构成饼状图基本的元素--扇形.文字,从这一章开始,内容可能有点难理解,因为每一章都会引入比较多的难理解知识点,在这 ...
- D3.js的v5版本入门教程(第五章)—— 选择、插入、删除元素
D3.js的v5版本入门教程(第五章) 1.选择元素 现在我们已经知道,d3.js中选择元素的函数有select()和selectAll(),下面来详细讲解一下 假设我们的<body>中有 ...
- 可视化工具D3.js教程 入门 (第十四章)—— 中国地图
可视化工具D3.js教程 入门 (第十四章)-- 中国地图 代码 <!DOCTYPE html> <html lang="en"><head>& ...
- python自学入门教程-Python学习教程(一)自学资源分享
在我看来,基本上可以不负责任地认为,Python 可以做任何事情.无论是从入门级选手到专业级选手都在做的爬虫,还是Web 程序开发.桌面程序开发还是科学计算.图像处理,Python都可以胜任. 或许是 ...
- 51单片机入门教程(6)——外部中断
51单片机入门教程(6)--外部中断 一.外部中断 1.1 中断 1.2 外部中断 二.中断优先级 一.外部中断 1.1 中断 关于中断的概念在上一篇博客中已经提到了.(传送门:51单片机入门教程(5 ...
最新文章
- [转]VS2015编译的程序在其他机器上缺少msvcp120.dll
- 程序员35岁生死大关!被迫无奈转行.....
- 小米大数据:借助Apache Kylin打造高效、易用的一站式OLAP解决方案
- Bellman 算法实现
- 直播预告 | 小米人工智能部崔世起:小爱同学全双工技术实践
- Python 爬起数据时 'gbk' codec can't encode character '\xa0' 的问题
- Android的手势的保存
- 图论--LCA--在线RMQ ST
- 静态网页托管_视频教程:如何在IPFS上托管网站!
- 字典哈希表的实现原理_GCC中unordered_(multi)set/map的实现原理 (Part 2 图解哈希表结构)...
- 安装中文VS2008 SP1 和.NETFRAMEWORK 3.5SP1后智能提示是英文的解决办法
- linux日志auditd,linux 审计工具auditd日志audit.log时间戳转换查看
- mysql数据库连接失败_mysql数据库连接失败是什么原因
- 贝叶斯网络节点概率的计算
- excel快捷键设置
- 谷歌浏览器崩溃,提示 “STATUS_INVALID_IMAGE_HASH” 的解决办法
- 子线程循环10次,接着主线程循环5次,接着又回到子线程循环10次,接着再回到主线程又循环5次,如此循环50次,请写出程序。
- JavaScript之排他思想详述
- 【VRP问题】基于遗传算法求解带容量的VRP问题matlab源码
- 沪漂程序媛妹子的一天...
热门文章
- Vue属性书写顺序推荐:
- MVC实现局部视图刷新
- 1、STM32通过软件IIC连接ADXL345(ADXL345使用遇到的一些坑)
- 磊科路由器dns服务器老要修复,路由器dns异常解决方法
- word自动更正关闭_如何在OS X中关闭自动更正文本替换
- 台式计算机上的硬磁盘,如何在台式计算机上安装机械硬盘驱动器?在台式计算机上安装机械硬盘驱动器的详细步骤...
- knife4j文档-个人笔记
- 一步步教你Windows配置ISCSI共享存储
- Vue小写金额转大写金额以及watch(监听)的使用
- Longest_consecutive_sequence