yokaooo

yokaooo 查看完整档案

填写现居城市  |  填写毕业院校  |  填写所在公司/组织填写个人主网站
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 个人简介什么都没有

个人动态

yokaooo 评论了文章 · 2018-08-22

如何用D3绘制各种样式的x坐标轴

该文只使用d3.jsV4版本进行绘制,不关注V3版本,我们要与时俱进。

在绘制图表的过程中,直坐标系是绕不开的一个问题,直方图,折线图,散点图等等都需要使用到直坐标系。而其中最关键的是x轴的绘制,因为y轴基本上都是数值显示。如何用代码实现,x轴的表现形式是什么,这是本文主要讨论的问题。

1 连续性x坐标轴

1.1 从零开始的连续性x坐标轴

什么是从零开始,就是从绘制的坐标轴的最左端开始显示第一个刻度。折线图散点图经常采用这种样式的x坐标轴。

let height = 400
let width = 600
let x = d3.scaleLinear().range([0, width])
let xScale = x.domain([0, 10])

// x轴
let xAxis = svg.append('g')
               .attr('class', 'xAxis')
               .attr('transform', `translate(0, ${height})`)
               .call(d3.axisBottom(xScale))

使用d3.axisTopd3.axisBottom()来控制刻度显示在坐标轴的上方或者下方。

表现形式:

1.2 不从零开始的连续性x坐标轴

情况比较少,基本不用,所以不作阐述。

1.3 时间型x坐标轴

时间轴也是线性的,所以将它归为此类。

let height = 400
let width = 600
let x = d3.scaleTime().range([0, width])
let xScale = x.domain([new Date(2017, 1), new Date(2017, 6)])

// x轴
let xAxis = svg.append('g')
               .attr('class', 'xAxis')
               .attr('transform', `translate(0, ${height})`)
               .call(d3.axisBottom(xScale))

表现形式:

2 非连续性x坐标轴

2.1 不从零开始的非连续性x坐标轴

先从不从零开始说起,因为这个用法比较正常。关键是使用d3.scaleBand()

let height = 400
let width = 600
let x = d3.scaleBand().range([0, width])
let xScale = x.domain(['北京', '上海', '广州', '深圳'])

// x轴
let xAxis = svg.append('g')
               .attr('class', 'xAxis')
               .attr('transform', `translate(0, ${height})`)
               .call(d3.axisBottom(xScale))

表现形式:

基本上,柱状图都会采用这种x坐标轴。

2.2 从零开始的非连续性x坐标轴

使用d3.scaleOrdinal()

let height = 400
let width = 600
let x = d3.scaleOrdinal().range([150, 300, 450, 600])
let xScale = x.domain(['北京', '上海', '广州', '深圳'])

// x轴
let xAxis = svg.append('g')
               .attr('class', 'xAxisis')
               .attr('transform', `translate(0, ${height})`)
               .call(d3.axisBottom(xScale))

表现形式:

在正常情况中,x轴的数据经常是非线性的。而绘制折线图,散点图等等又需要采用这种表现形式,所以这种方法是比较常用的。

查看原文

yokaooo 关注了专栏 · 2018-08-22

前端的bigboom

个人博客: https://www.villainhr.com 公众号:前端小吉米

关注 1065

yokaooo 关注了标签 · 2018-08-22

php

PHP,是英文超文本预处理语言 Hypertext Preprocessor 的缩写。PHP 是一种开源的通用计算机脚本语言,尤其适用于网络开发并可嵌入HTML 中使用。PHP 的语法借鉴吸收 C语言、Java 和 Perl 等流行计算机语言的特点,易于一般程序员学习。(目前是 Web 开发性价比最高的语言)

关注 84761

yokaooo 关注了标签 · 2018-08-22

node.js

图片描述
Node 是一个 Javascript 运行环境(runtime)。实际上它是对 Google V8 引擎(应用于 Google Chrome 浏览器)进行了封装。V8 引擎执行 Javascript 的速度非常快,性能非常好。Node 对一些特殊用例进行了优化,提供了替代的 API,使得 V8 在非浏览器环境下运行得更好。例如,在服务器环境中,处理二进制数据通常是必不可少的,但 Javascript 对此支持不足,因此,V8.Node 增加了 Buffer 类,方便并且高效地 处理二进制数据。因此,Node 不仅仅简单的使用了 V8,还对其进行了优化,使其在各环境下更加给力。

关注 81860

yokaooo 关注了标签 · 2018-08-22

python

Python(发音:英[ˈpaɪθən],美[ˈpaɪθɑ:n]),是一种面向对象、直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法非常简捷和清晰,与其它大多数程序设计语言不一样,它使用缩进来定义语句。

Python支持命令式程序设计、面向对象程序设计、函数式编程、面向切面编程、泛型编程多种编程范式。与Scheme、Ruby、Perl、Tcl等动态语言一样,Python具备垃圾回收功能,能够自动管理存储器使用。它经常被当作脚本语言用于处理系统管理任务和网络程序编写,然而它也非常适合完成各种高级任务。Python虚拟机本身几乎可以在所有的作业系统中运行。使用一些诸如py2exe、PyPy、PyInstaller之类的工具可以将Python源代码转换成可以脱离Python解释器运行的程序。

Python的主要参考实现是CPython,它是一个由社区驱动的自由软件。目前由Python软件基金会管理。基于这种语言的相关技术正在飞快的发展,用户数量快速扩大,相关的资源非常多。

关注 129135

yokaooo 关注了标签 · 2018-08-22

vue.js

Reactive Components for Modern Web Interfaces.

Vue.js 是一个用于创建 web 交互界面的。其特点是

  • 简洁 HTML 模板 + JSON 数据,再创建一个 Vue 实例,就这么简单。
  • 数据驱动 自动追踪依赖的模板表达式和计算属性。
  • 组件化 用解耦、可复用的组件来构造界面。
  • 轻量 ~24kb min+gzip,无依赖。
  • 快速 精确有效的异步批量 DOM 更新。
  • 模块友好 通过 NPM 或 Bower 安装,无缝融入你的工作流。

官网:https://vuejs.org
GitHub:https://github.com/vuejs/vue

关注 127963

yokaooo 关注了标签 · 2018-08-22

css

层叠样式表(英语:Cascading Style Sheets,简写CSS),又称串样式列表,由W3C定义和维护的标准,一种用来为结构化文档(如HTML文档或XML应用)添加样式(字体、间距和颜色等)的计算机语言。

关注 88009

yokaooo 关注了标签 · 2018-08-22

html5

HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

关注 89905

认证与成就

  • 获得 0 次点赞
  • 获得 0 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 0 枚铜徽章

擅长技能
编辑

(゚∀゚ )
暂时没有

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2018-08-22
个人主页被 150 人浏览