javascript - d3 x 轴对于散点图内容来说太短

标签 javascript d3.js scatter-plot

我在 D3 散点图上的 X 轴宽度方面遇到了问题 - 发生的情况是我的 x 轴没有填充分配的空间,而数据很乐意填充。 JSfiddle在这里:http://jsfiddle.net/u4cGJ/

我这样定义了 d3 秤的输出范围:

.range([padding, svgWidth - padding]);

散点图上点的输出范围与此完全一致,但 x 轴却没有 - 它停止在显示的点范围之外, - 它完全按照我告诉它的方式执行,但是,当 svg 进一步延伸时,数据也会填充该空间,留下一部分可见的数据,但不会放置在轴的上下文中。

感谢您提供的任何帮助!

最佳答案

问题可能是您定义的域不包含数据的完整范围。比例域/范围用于映射数据值的范围,因此如果您的域是 [0,10] 并且范围是 [0,100],您将得到类似 range(0) = 0、range(1) = 10 的值,范围(2) = 20...范围(10) = 100(取决于所使用的比例类型)。

由于它只是将域映射到范围,因此如果您给它一个它无法映射的值,则您不太可能获得范围范围内的值。例如。如果你执行 range(11) 你不会得到 0 到 100 之间的值。由于范围值是你的轴和绘图可能用来构建实际 svg 的值,所以落在你的域之外的点将结束关闭你的情节(或 NaN 或其他东西)。

尝试从数据本身派生域。 D3 具有最小、最大和范围函数,可以让您轻松完成此操作。如果您有一个点对象数组,则可以使用访问器作为函数来提供计算中使用的正确值。

这是一个例子:

var data =  [{x:1, y:1}, {x:2, y:4}, {x:3, y:2}, {x:4, y:1}, {x:5, y:2}];
var xExtent = d3.extent(data, function(d) { return d.x; });
var yExtent = d3.extent(data, function(d) { return d.y; });

参见 jsFiddle:http://jsfiddle.net/reblace/c9qw8/

看看你的 fiddle ,逻辑中似乎存在错误,你使用了错误的域来绘制实际绘制的内容。如果您摆脱默认的最小和最大内容,它似乎可以纠正您所描述的问题:

function makeScales(xAxisRepresents, domainMinOverride, domainMaxOverride) {
   var domainMin = d3.min(dataset, function datumToValueTransformer(datum) { return datum[xAxisRepresents]; });
   var domainMax = d3.max(dataset, function datumToValueTransformer(datum) { return datum[xAxisRepresents]; });

关于javascript - d3 x 轴对于散点图内容来说太短,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18746872/

相关文章:

javascript - 比较 jquery 中的两个输入

javascript - 使用 ajax 向 Node.js 服务器发送 POST 请求

javascript - 堆叠条形图比例不一致问题

javascript - 图例没有附加到 div 中,而是打印在 div 之外

javascript - 在 Highcharts 散点图中按比例缩放 xy

javascript - 从网站构建 html/css/javascript 代码以提高可读性

javascript - jQuery 每次添加总计

javascript - D3.js 线图 pandas dataframe JSON

javascript - 带标签的 React Native 散点图

r - 使用汽车包装中的散点图并排绘制