背景
pixelmatch是一个JavaScript
像素级图像比较库,最初创建是为了比较测试中的屏幕截图。具有准确的抗锯齿像素检测和感知色差指标。非常小(大约有 150 行代码)可以在浏览器和nodejs
中运行。
本文简析pixelmatch的工作过程及原理。
pixelmatch是一个JavaScript
像素级图像比较库,最初创建是为了比较测试中的屏幕截图。具有准确的抗锯齿像素检测和感知色差指标。非常小(大约有 150 行代码)可以在浏览器和nodejs
中运行。
本文简析pixelmatch的工作过程及原理。
本文简述G2如何实现点击图例联动数据筛选。
这里回答三个问题
legend:filter
事件。legend
模块相应了legend:filter
事件,根据图例的筛选状态执行了filter
方法。filter
中根据上下文实例context
获取了图表的marks
。忽略了legends``marks
对其他marks
修改了其transform
和scale
。由于filter
操作本质上是在修改marks
修改了其transform
和scale
, 并没有涉及数据的移除和添加,所以隐藏/显示逻辑其实并无区别。
本文简述ECharts如何实现点击图例联动数据筛选。
这里回答三个问题
legendAction
同时触发整个图表的update
。update
之前执行了restoreData
方法以恢复最原始的默认数据。update
任务中执行了legendFilter
。legendFilter
中根据自身属性对series
做了filter
。在步骤4中对要渲染的series
做了过滤仅渲染需要渲染的series
。
在步骤2中恢复了整个图表最原始的默认数据。
本文主要调研一些开源的底层图表库,评估其易用性、灵活性、可定制性、以及接入charts-studio的难易程度。目的是评估图表工具的底层引擎是是否需要更换,能否为图表工具选择一个灵活且高效的底层引擎。
项目详情见:chart-lib-learn
本文将简述ECharts
如何实现标签自动旋转特定角度以解决柱状图或折线图轴线标签重叠的问题。
解决问题的流程如下:
[0,25,45,70,90]
。label
并根据最长的label
的 size
计算每一个候选的旋转角度下的size
(详情见:https://codepen.io/agurtovoy/pen/WNPyqWx)width
下图中的横向绿线部分即和轴交叉的部分。height
为下图中红框高度。size
和图表中的间隔做比对,横向图width
做比对纵向图height
做比对。看最大label
的交叉长度需要几个单位间隔的宽度来装。这个值即为label
的间隔个数。vega的schema
设计以json
格式描述数据视觉外观和交互式行为而闻名。 作为业界标杆本文简析Vega-Schema的设计。
以下是 Vega 规范的基本概述。完整的规范包括数据、刻度、轴、标记等属性的相应子集的定义。
1 | { |
HighCharts
是一个默认使用SVG
渲染器的图表引擎,其对内部的DOM
元素都设置了Class
属性以描述其类别和样式。起到了类似ECharts theme的效果。
G2
设计了一套规范(Spec) 去描述可以绘制的可视化,使得用户可以通过调用 chart.options(options)
根据指定的满足规范的选项(options) 去渲染图表。
1 | (() => { |
基于底层的 Spec
,为了提供更多样化和灵活地声明图表的能力,G2
也提供了一系列函数式 API 来声明图表,比如声明上面简单的条形图:
1 | (() => { |
本文将探究G2
是如何实现两套语法用于绘制图表的。