d3.js - 推到 svg 左上角的图形节点
问题描述
我正在自学 D3 来绘制我为我的项目收集和处理的一些数据。我相信我已经打下了 D3 的基础,所以我决定开始创建自己的 Scatterplot。因此,连同一些测试数据,我编写了一些将点绘制到屏幕上的代码(嗯,应该如此)。它打印出图表的元素,但它们都位于 svg 的左上角。
谁能提供一些帮助并帮助我理解它为什么这样做?我在 SO 上找不到任何类似的帖子。
<!DOCTYPE html>
<html>
<style>
</style>
<body>
<script src="https://d3js.org/d3.v4.min.js"></script>
<script>
var data = [[0.3,0.3], [0.10, 0.10], [0.4, 0.4], [0.8, 0.8]];
var w = 500;
var h = 300;
var padding = 20;
var svg = d3.select('body')
.append("svg")
.attr('width', w)
.attr('height', h)
svg.selectAll("circle")
.data(data)
.enter()
.append("circle")
.attr("r", 5)
.attr("cx", function(d) { return d[0]; })
.attr("cy", function(d) { return d[1]; });
</script>
</body>
</html>
解决方案
正如评论中指出的那样,您的代码正在产生预期的东西。
d3 世界的一个核心概念是音阶(参见这篇精彩的介绍。)
本质上,您希望通过笛卡尔坐标将数据从其范围映射到您分配的空间(您的 SVG)。
您当前的 x/y 坐标为 0.3px/0.3px。
通过定义范围从 0 到 1 的比例并使用 SVG 的尺寸映射您的值,您正在解决您的问题:
var xScale = d3.scaleLinear()
.domain([0,1]) // that's the extent of your data
.range([0,w]) // that's how wide your SVG is
在理想的世界中,您将重复此操作并定义一个yScale
来计算您的点的 y 坐标。
这是一个工作 jsFiddle,看看。
推荐阅读
- math - 如何计算给定树上的平均分支因子
- oracle - 在 Redhat 8.1 上安装 Oracle 19c 时出错
- vba - 日期选择器控件替换在 Outlook 中不起作用
- postgresql - heroku pg:psql 挂起,甚至不显示任何错误 (Windows)
- r - 在 for 循环中组合多个 ggplot 几何图形
- php - PHP 警告:ftp_login() 期望参数 1 是资源,bool 在
- c# - 正则表达式无法识别字母 C、F 等
- python - 有没有办法在python中删除部分文件名(路径)?
- java - 打开显示内部帮助 (html) 页面
- java - 使用 testng 运行 Rest Assured API 测试时出现控制台错误