暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据可视化-D3.js框架:「15]反转 SVG 元素

路条编程 2021-11-05
520



这一系列课程将介绍D3.js 或 D3 代表数据驱动的文档。D3 是一个 JavaScript 库,用于在浏览器中创建动态和交互式数据可视化。它是为使用常见的 web 标准而构建的,即 HTML、CSS 和可伸缩矢量图形(SVG)。

D3 获取输入数据并将其映射为该数据的可视表示。它支持多种不同的数据格式。D3 允许您将数据绑定(或附加)到文档对象模型(DOM)。您可以使用带有 D3 内置方法的 HTML 或 SVG 元素将数据转换为可视化。

D3 为您提供了对数据表示的大量控制。本课程将介绍 D3 库的基本功能以及如何使用 D3 库创建可视化效果。

反转 SVG 元素

我们可能已经注意到了常见的条形图像是把这个翻转或者颠倒过来。这是因为 SVG 的 (x, y) 坐标有些特别。

在 SVG 中,坐标轴的原点在左上角。x 坐标为 0 将图形放在 SVG 区域的左边缘,y 坐标为 0 将图形放在 SVG 区域的上边缘。x 值增大矩形将向右移动,y 值增大矩形将向下移动。

为了使条形图向上,需要改变 y 坐标计算的方式。这需要计算组的高度和 SVG 区域的总高度。

SVG 区域的高度为 100。如果在集合中一个数据点的值为 0,这组将从 SVG 区域的最底端开始(而不是顶端)。为此,y 坐标的值应为 100。如果数据点的值为 1,我们将从 y 坐标为 100 开始来将这组设置在底端,然后需要考虑该组的高度为 1,所以最终的 y 坐标将是 99。

y 坐标为 y = heightOfSVG - heightOfBar 会将条形图向上放置。

改变 y 属性的回调函数,让条形图向上放置。height 的值是 3 倍 d 的值。

提示:通常,高度关系为 y = h - m * d,其中 m 是对数据点进行缩放的比例。

完整代码如下所示:


<body>
<script>
const dataset = [12, 31, 22, 17, 25, 18, 29, 14, 9];
const w = 500;
const h = 100;
const svg = d3.select("body")
.append("svg")
.attr("width", w)
.attr("height", h);
svg.selectAll("rect")
.data(dataset)
.enter()
.append("rect")
.attr("x", (d, i) => i * 30)
.attr("y", (d, i) => h - 3 * d)
.attr("width", 25)
.attr("height", (d, i) => 3 * d);
</script>
</body>


今天就讲到这里,如果有问题需要咨询,大家可以直接留言或扫下方二维码关注公众号。也可以添加 happyzjp 微信受邀加入学习社群,我们会尽力为你解答。练习网站已经正式上线,大家可以登陆网站 http://www.icoderoad.com 进行文章中示例的练习。
文章转载自路条编程,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论