2018-12-02-学习周报

内容要点

  • d3图表的一些更为复杂的操作,希望此次的学习内容可以在之后的分享里面为大家提供一些绘图和可视化操作上的思路,并且希望得到大家的指正和建议

内容详情

  1. 三种类型的图表绘制


    image.png
image.png
image.png

三个图表对应的代码链接如下:
图1
图2
图3

  1. 相关的api记录(上一次学习总结中的api不再仔细介绍)
  • d3.extent(array[, accessor])
    用于求解范围,分别有两个参数,为数组array与读取数据的函数accessor,如果没有设置accessor,则直接从array中找到最大值最小值,作为输出范围,如果有accessor,则根据accessor函数自定义访问array中的数据。例如:
let x = d3.scaleTime()
  .domain(d3.extent(data, d => new Date(d.date)))
  .range([margin.left, width - margin.right]);

定义域domain函数中,d3.extent(data, d => new Date(d.date))表示我们需要从data数组中的读取每一个数组元素的date属性值,找出所有date中的最大值最小值作为最后输出的范围。

  • d3.max(array[, accessor])
    顾名思义,找到数组中的最大值,accessor同样是数据访问自定义方式。

  • pow.nice()
    将输入范围扩展到漂亮的整数,如图一展示的纵坐标的范围就是通过nice调整到合适的范围,这个函数可以说是非常人性化了,不需要我们手动的计算合适的计数范围。

  • ticks
    从比例尺的 domain 中返回具有代表性的日期刻度。但是此处还有一些细节的东西,需要详细描述,参考

  • tickSizeOuter
    外侧刻度大小


    image.png

    在顶部的三个图中,外侧刻度均设置为0。

  • clone
    复制元素。
    图2可以看到在纵坐标处有一个我的步数的纵坐标图例。此处的图例text元素就是通过复制最顶部的纵坐标刻度14000得到的,重新设置xy位置,并填入新的文本,即可制作纵轴指示图例。此处参考了d3画廊observable上大师们的做法。大师的作品

  • defined
    缺省访问器,使用方式如下图。在编写折线生成器的时候,过滤掉份非数字的坐标,可以有效的防止图线断裂或绘制失败的情况发生。

let line = d3.line()
  .defined(d => !isNaN(d.value)) // 防止出现非数字值导致的图线断裂
  .x(d => x(new Date(d.date)))
  .y(d => y(d.value));
  • call(熟悉的call/apply/bind)
  • tickFormat
  • d3.timeFormat
    (坐标的自定义显示格式,此处用在了横坐标时间的格式化上,可以看到顶部三个图的横轴时间格式是不同的)
// 图2
let xAxis = g => g
  .attr("transform", `translate(0,${height - margin.bottom})`)
  .call(d3.axisBottom(x)
    .ticks(width / 80)
    .tickSizeOuter(0)
    .tickFormat(d3.timeFormat('%Y-%m-%d'))
  )
  .call(g => g.selectAll('.tick text')
    .attr('y', 10)
    .attr('x', 30)
    .attr('transform', 'rotate(25)')
  );
// 图3
let xAxis = g => g
  .attr("transform", `translate(0,${height - margin.bottom})`)
  .call(d3.axisBottom(x)
    .ticks(width / 80)
    .tickSizeOuter(0)
    .tickFormat(d3.timeFormat('%Y年%m月%d日'))
  )
  .call(g => g.selectAll('.tick text')
    .attr('y', 10)
    .attr('x', 30)
    .attr('transform', 'rotate(25)')
  );

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

推荐阅读更多精彩内容

  • d3 (核心部分)选择集d3.select - 从当前文档中选择一系列元素。d3.selectAll - 从当前文...
    谢大见阅读 3,439评论 1 4
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,941评论 6 13
  • 直方图主要用在数据图表,作为对比数据,用柱体高度的高低,形象直观地表达出来,往往与折线图配合使用,而折线图便于从众...
    理想是试阅读 943评论 0 0
  • 1.发现故事 本课讲述可视化用到的:叙事结构数据收集过程数据处理 2.新闻方法 给可视化添加语境围绕数据进行叙事 ...
    esskeetit阅读 2,802评论 0 2
  • 嗨,你好! 我们相识多年, 从青春年少到两鬓斑白, 我见证了你一路走来的历程。 总觉得上天厚待于你, 未曾让你经历...
    五月的荷阅读 562评论 10 14