【问题标题】:using d3.scaleOrdinal troubleshooting使用 d3.scaleOrdinal 故障排除
【发布时间】:2021-04-30 02:07:07
【问题描述】:

我正在制作一个平行图(请参阅:https://www.data-to-viz.com/graph/parallel.html),并且我的每条线也需要根据它们分配的国家/地区使用不同的颜色。我在 JS d3 工作。

这是我现在的规模:

var ColorScale = d3.scaleOrdinal().domain(countries).range(d3.schemeDark2);

但我认为问题不在这里,因为当我检查每个国家/地区都有不同的颜色代码时。 我有一个函数可以制作通过颜色的线条,然后是代码:

d3.select("g#lines")
.append("path")
.datum(data)
.attr("class", "line")
.attr("d", LineGenerator)
.style("stroke", Color);

当我检查页面时,stroke 总是设置为 rgb(102, 102, 102),我认为它是灰色的。我认为我没有覆盖它的 CSS 规则。

如果您有兴趣,这里是codeandbox上完整代码的链接:https://codesandbox.io/s/csc-160-project-forked-5bx01

这是写在“parallelplot.js”文件中的。 “plot.html”文件是它被绘制的地方。数据来自“DataTransposed.csv”

【问题讨论】:

  • 出现问题是因为您将 6 个参数传递给 make line 函数,第六个是颜色,第五个是比例。该函数只接受 5 个参数,其中第 5 个应该是颜色,所以你的参数不匹配。
  • 哦,谢谢你的收获!我没注意到

标签: javascript html d3.js


【解决方案1】:

您需要进行一些更改,首先您定义的用于绘制线条的函数只需要 5 个参数,并且您同时传递了比例和颜色值,它需要其中的第一个(比例),即始终相同,因此您的输出始终是相同的颜色。

var MakeLine = function (data, country, xScale, yScale, Color) {

其次,由于您可能会有超过 2 个国家/地区,因此您不想创建中间变量,只需发送评估

var ColorScale = d3.scaleOrdinal().domain(countries).range(d3.schemeDark2);
  MakeAxes(graph, margins, xScale, yScale);

  d3.select("svg#linegraph")
    .append("g")
    .attr("id", "lines")
    .attr("transform", MakeTranslateString(margins.left, margins.top));

  MakeLine(data, "Argentina", xScale, yScale, ColorScale("Argentina"));
  MakeLine(data, "Egypt", xScale, yScale, ColorScale("Egypt"));

如果您在浏览数据时将国家/地区名称作为变量传递以让单个语句完成所有操作,那就更好了。

【讨论】:

  • 哦,感谢您对参数的了解!我也很想把它放在一个循环中,但不幸的是我不知道在 JS 中这样做。 (我的大脑告诉我像在国家中的国家那样做,以国家为参数调用函数,但我不知道语法或者它是否在 JS 中有效,我的老师建议我只是调用它......很多。不是理想,但它就在那里)
猜你喜欢
  • 1970-01-01
  • 2013-07-15
  • 2010-11-30
  • 2021-09-11
  • 2012-02-18
  • 2011-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多