通过实例学习创建D3.js数据可视化
本文由
D3.js是一个JavaScript库,用于基于数据操作文档。D3帮助您使用HTML、SVG和CSS生动地呈现数据。
我只建议使用三个JavaScript库
这不是你爸爸的图库.
威廉·普莱费尔发明了
D3是一个非常灵活的低级可视化库,具有类似jquery的API,用于将数据映射到HTML和SVG文档。它包含大量有用的数学函数,用于数据转换和物理计算,尽管它的大部分功能来自SVG中的几何图形和路径操作。
本文的目的是让您对D3的功能有一个高层次的概述,在每个示例中您都可以看到
柱状图
我向你承诺过比William Playfair的图表更多的东西,但是用HTML制作简单的柱状图是理解D3如何将数据转换为文档的最简单方法之一。这是它的样子:
d3.选择(“图号”).selectAll(" div ").数据([ 4,8,15,16,23,42]).输入().附加(" div ").风格(“高度”,(d)= >d+ “像素”)
的
这段代码映射输入数据
<divid="图表" ><div风格="高度:4px;">div><div风格="高度:8px;">div><div风格="高度:15px;">div><div风格="高度:16px;">div><div风格="高度:23px;">div><div风格="高度:42px;">div>div>
所有不变的样式属性都可以放入CSS中。
#图div{显示:inline-block; 背景:# 4285 f4;宽度:20.px;margin-right:3.px;}
GitHub的贡献图表
通过几行额外的代码,我们可以将上面的柱状图转换为类似于Github的贡献图。
而不是根据数据的值来设置高度,我们可以设置
常量colorMap= d3.interpolateRgb(d3.rgb(“# d6e685”),d3.rgb(“# 1 e6823”))d3.选择(“图号”).selectAll(" div ").数据([ .2,.4,0,0,13。,.92] ).输入().附加(" div ").风格(“背景颜色”,(d )= >{ 返回d= =0? “# eee”:colorMap(d)} )
的 D3的强大之处在于它与SVG一起工作,SVG包含用于绘制圆、多边形、路径和文本等2D图形的标签。 上面的代码绘制: 前面例子中的数据集是一个简单的数字数组,D3也可以处理更复杂的类型。 对于每一个数据点,我们将附加一个 的变量 这段代码将输入数据映射到这个SVG文档,您能看出它是如何工作的吗? 在SVG中绘制折线图非常简单,我们希望像这样转换数据: 在本文档中: 请注意: 假设它只是一个单路径元素,我们 D3有路径生成函数,让这个更简单,这是它的样子。 多更好!的 比例是将输入域映射到输出范围的函数。 在我们目前看到的例子中,我们已经能够使用“神奇数字”在图表范围内定位事物,当数据是动态的,你需要做一些数学计算来适当地缩放数据。 假设我们想要渲染一个500px宽,200px高的折线图,使用以下数据: 理想情况下,我们希望y轴值从0到30(最大y值),x轴值从0到50(最大x值),这样数据就占据了图表的全部维度。 我们可以用 这些尺度类似于我们之前创建的颜色插值函数,它们只是将输入值映射到输出范围中的某个值的函数。 它们也适用于输入域之外的值: 我们可以在我们的线生成函数中使用这些刻度,就像这样: 你可以很容易地使用缩放来做的另一件事是在输出范围周围指定填充: 现在我们可以渲染一个动态数据集,我们的折线图将始终适合我们的500px / 200px边界,两边都有20px的填充。 线性尺度是最常见的类型,但也有其他的 例如,我们可以创建一个比例,将我的寿命映射到0到500之间的数字: 这一切都很好,但到目前为止,我们只看到静态的无生气的图形。让我们制作一个动画可视化,显示澳大利亚墨尔本和悉尼之间的活跃航班随时间的变化。
看钢笔 这种类型的图形的SVG文档由文本、线条和圆组成。 动力部分是 为了获得动态时间的x位置,我们需要为每个航班创建一个时间刻度,将其出发和到达时间映射到图表上的x位置。我们可以在开始添加时循环遍历数据 现在可以将更改后的Date传递给 出发和到达的时间四舍五入为5分钟,这样我们就可以从第一次出发到最后一次到达,以5m为增量逐级查看数据。 D3允许你在以下情况下指定元素的转换和过渡: 上面的代码以5分钟的时间增量,每500ms渲染一帧: 这是可行的,但我们真正想要的是每个帧之间的平滑过渡。我们可以通过在任何D3选择上创建过渡,并在设置属性或样式属性之前提供持续时间和缓和功能来实现这一点。
例如,让我们在进入飞行组的不透明性中逐渐淡化。 让我们逐渐淡出正在起飞的航班群。 在x点和y点之间添加平滑过渡。 方法还可以在5分钟增量之间转换时间,以便每分钟显示一次,而不是每5分钟显示一次 关于这个库还有很多我在本文中无法涵盖的内容,我很想深入挖掘一些更有意义的例子,但正如他们所说,你需要把马放在车前面。 还有很多例子 希望这个高水平的概述和一些实际的例子已经给了你一个如何使用选择,缩放和过渡的想法。考虑最好的方法来表示您的数据,并创建您自己独特的数据可视化。请在评论中留言告诉我SVG入门
<svg宽度="200
<路径>
是SVG中最强大的元素。圈
常量数据
常量g
<svg高度="One hundred.
折线图
常量数据
<svgid="图表
常量路径
常量行
尺度
常量数据
常量宽度
xScale(0)->0xScale(10)->One hundred.xScale(50)->500
xScale(-10)->-One hundred.xScale(60)->600
常量行
常量填充
常量生活
动画飞行可视化
<svgid="图表
让数据
数据
渲染循环
让现在
输入、更新和退出
常量渲染=函数(数据
转换
常量newFlight
飞行
飞行
常量inFiveMinutes
t
要有创意