d3(一)---画坐标轴

先贴个总的中文文档,然后是坐标轴d3-axis文档,安装什么的就跳过了。

一、简介

d3的坐标轴由<path>、<line>、<text>三种元素组成的。其中,坐标轴的直线是<path>,刻度(tick)是<line>,刻度上的文字是<text>。

下面是官方文档给的一个典型的axis栗子(当然,这只是在控制台看到的dom结构,真正画起来还是很简洁的)

<g fill="none" font-size="10" font-family="sans-serif" text-anchor="middle">
  <path class="domain" stroke="currentColor" d="M0.5,6V0.5H880.5V6"></path>
  <g class="tick" opacity="1" transform="translate(0.5,0)">
    <line stroke="currentColor" y2="6"></line>
    <text fill="currentColor" y="9" dy="0.71em">0.0</text>
  </g>
  <g class="tick" opacity="1" transform="translate(176.5,0)">
    <line stroke="currentColor" y2="6"></line>
    <text fill="currentColor" y="9" dy="0.71em">0.2</text>
  </g>
  <g class="tick" opacity="1" transform="translate(352.5,0)">
    <line stroke="currentColor" y2="6"></line>
    <text fill="currentColor" y="9" dy="0.71em">0.4</text>
  </g>
  <g class="tick" opacity="1" transform="translate(528.5,0)">
    <line stroke="currentColor" y2="6"></line>
    <text fill="currentColor" y="9" dy="0.71em">0.6</text>
  </g>
  <g class="tick" opacity="1" transform="translate(704.5,0)">
    <line stroke="currentColor" y2="6"></line>
    <text fill="currentColor" y="9" dy="0.71em">0.8</text>
  </g>
  <g class="tick" opacity="1" transform="translate(880.5,0)">
    <line stroke="currentColor" y2="6"></line>
    <text fill="currentColor" y="9" dy="0.71em">1.0</text>
  </g>
</g>

二、栗子

      // 取class为container的dom,插入宽高分别为880px和850px的svg
      this.svg = d3.selectAll(".container").append('svg').attr("width",880).attr("height", 850)
      // 设置y轴和x轴的范围
      let yScale = d3.scaleLinear().domain([0,3000]).range([0,750]),
      xScale = d3.scaleLinear().range([0,680]).domain(['','']) , 
      //设置x和y轴的刻度方向及刻度数
      yaxis = d3.axisLeft().scale(yScale),
      xaxis = d3.axisTop().scale(xScale);
      // 设置x和y轴的刻度的样式,并画上去(和最后两行注释掉的等价)
      gAxis = this.svg.append("g").attr("font-size","20").attr("transform", "translate(80,80)").call(yaxis),
      xAxis = this.svg.append("g").attr("font-size","20").attr("transform", "translate(80,80)").call(xaxis);
      // yaxis(this.svg.append("g").attr("font-size","20").attr("transform", "translate(80,80)"))
      // xaxis(this.svg.append("g").attr("font-size","20").attr("transform", "translate(80,80)"))

步骤很简单:
1、取个dom画个大svg(个人理解为「画布」)
2、设置x轴及y轴(线性、值域、像素范围、刻度方向、刻度样式及位置),画

结果是一个倒L形的坐标轴,如果想要通常的L形的坐标轴,可以将y轴的domain翻转一下,再将x轴平移一下,如下栗:

this.svg = d3.selectAll(".container").append('svg').attr("width",880).attr("height", 850)
let yScale = d3.scaleLinear().domain([0,3000]).range([750,0]),
xScale = d3.scaleLinear().range([0,680]).domain(['','']) ,
yaxis = d3.axisLeft().scale(yScale),
xaxis = d3.axisBottom().scale(xScale),
gAxis = this.svg.append("g").attr("font-size","20").attr("transform", "translate(80,40)").call(yaxis),
xAxis = this.svg.append("g").attr("font-size","20").attr("transform", "translate(80,790)").call(xaxis);

三、api解释

1、domain([0,3000])表示刻度的数值范围。
2、range([0,750])表示像素范围;我不想要默认范围和刻度,就传了['','']。(不报错,应该有更好的方案)
3、表示刻度(tick)方向:axisTop、axisRight、axisBottom、axisLeft。
意思也很明显,Top和Bottom是横坐标的刻度在上还是在下;Left和Right是纵坐标的刻度在左还是右。
4、scale():设置比例尺,栗子里把yScale和xScale当做参数传进去了
5、ticks():设置刻度数,有默认值。
6、attr("transform", "translate(80,80)"):这两句是决定x和y轴相对于左上角的点偏移量。

ps:d3的api太丰富了,英文文档啃的有点慢,有时候还得一个一个的试api,但是条条大路通罗马,最终也是弄出来了一个想要的坐标轴。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容

  • d3 (核心部分)选择集d3.select - 从当前文档中选择一系列元素。d3.selectAll - 从当前文...
    谢大见阅读 3,419评论 1 4
  • 这里讲一下怎么样用d3.js,输入一个数据list,根据数据画一个带有坐标轴的简单直方图.以下是目标效果. 直方图...
    Kaidi_G阅读 4,800评论 1 3
  • 看完该API后,至少会画出一个简单的图形 D3.js 入门 1. d3-selection: 【 选择作图区域...
    Pretty_Boy阅读 942评论 0 1
  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,470评论 1 11
  • D3是用于数据可视化的Javascript库。使用SVG,Canvas和HTML。结合强大的可视化技术和数据驱动的...
    Evelynzzz阅读 7,879评论 7 5