【问题标题】:Understanding D3 domain and ranges了解 D3 域和范围
【发布时间】:2021-02-03 14:58:24
【问题描述】:

我的温度范围为 33 度到 64 华氏度。我试图找出 59 度沿 y 轴跨越 600 像素的像素位置。这是一个柱形图。

完全公开,这是我一直在努力解决的家庭作业,只是还没有弄清楚。

var scale = d3.scale.linear().domain([33,64]).range([0,64]);

scale(59) 返回 53.677419354838705 这是错误的答案。 600 - 53.677419354838705 也是错误答案。

我可能缺少什么?

谢谢。

【问题讨论】:

  • 你可以试试 range([0,600])
  • 正如上面的评论所说,您的范围不正确。如果您想对线性刻度的工作原理进行数学解释,请在此处查看我的答案:stackoverflow.com/questions/40535370/…

标签: d3.js


【解决方案1】:

domain 是一组完整的值,因此在本例中是所有温度,从 33 到 64。range 是一组结果值的函数,在这种情况下,将温度从 0 缩放到 600 的结果值。

所以你快到了,你只是使用了错误的范围 - 在这种情况下,你的范围应该是你的 y 轴的跨度(0 - 600):

var scale = d3.scale.linear().domain([33, 64]).range([0, 600]);

这将导致scale(59) 的输出为503.2258064516129

【讨论】:

  • 我尝试了 503.2258064516129,但我仍然得到错误的答案。我还尝试从 600 中减去它,但仍然得到错误的答案。 59 度的条形高度应对应于像素长度,但 y 轴从 0 开始并向下增加。这就是我尝试从 600 中减去的原因。我什至尝试四舍五入为整数。
  • @martinbshp 你为什么说“我得到错误的答案”? 正确答案是什么?鉴于您描述的问题,Le Fleur 的回答是正确的。
  • @GerardoFurtado OP 从未说过温度范围应该适合整个轴的范围。我的猜测可能是 553.125 (.domain([0,64]).range([0,600])),甚至可能是 506.25 (.domain([32,64]).range([0,600]))。这是处理人为问题的问题之一,由于缺乏信息,您无法获胜。这在一定程度上吸收了如此多的精力和注意力,这让我很难过。
  • @altocumulus,你说的太对了。最近这个标签越来越差。现在马特已经解决了比例问题,OP的问题已经转移到如何绘制条形图......
  • 好吧,如果他/她从来没有说过温度适合整个轴,那么只有千里眼才能回答这个......
猜你喜欢
  • 1970-01-01
  • 2016-04-23
  • 1970-01-01
  • 2015-10-03
  • 1970-01-01
  • 2015-10-03
  • 2016-06-17
相关资源
最近更新 更多