Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按高度百分比(d3.js)填充象形图中绘制的最后一个svg图形_Javascript_D3.js_Svg - Fatal编程技术网

Javascript 按高度百分比(d3.js)填充象形图中绘制的最后一个svg图形

Javascript 按高度百分比(d3.js)填充象形图中绘制的最后一个svg图形,javascript,d3.js,svg,Javascript,D3.js,Svg,我正在尝试修改这个。我想创造一个类似的影响,但没有用户输入。我的目标是显示50个SVG图形,但要让100个图形中的数据都显示出来。例如,如果数据输入为27,则填充13.5个图形 从我在d3工作的有限经验来看,我知道如果不是所有css,代码将不得不省略大部分。这是我迄今为止的尝试 我真的不确定如何处理最后一个元素的转换,以便根据27/2的数据,它只能填充最后一个图形50% 这是代码 var svgDoc = d3.select("body") .append("svg") .attr("viewB

我正在尝试修改这个。我想创造一个类似的影响,但没有用户输入。我的目标是显示50个SVG图形,但要让100个图形中的数据都显示出来。例如,如果数据输入为27,则填充13.5个图形

从我在d3工作的有限经验来看,我知道如果不是所有css,代码将不得不省略大部分。这是我迄今为止的尝试

我真的不确定如何处理最后一个元素的转换,以便根据27/2的数据,它只能填充最后一个图形50%

这是代码

var svgDoc = d3.select("body")
.append("svg")
.attr("viewBox", "0 0 100 100");

//define an icon store it in svg <defs> elements as a reusable component - this geometry can be generated from Inkscape, Illustrator or similar
svgDoc.append("defs")
  .append("g")

  .attr("id", "iconCustom")

  .append("path")

  .attr("d", "M3.5,2H2.7C3,1.8,3.3,1.5,3.3,1.1c0-0.6-0.4-1-1-1c-0.6,0-1,0.4-1,1c0,0.4,0.2,0.7,0.6,0.9H1.1C0.7,2,0.4,2.3,0.4,2.6v1.9c0,0.3,0.3,0.6,0.6,0.6h0.2c0,0,0,0.1,0,0.1v1.9c0,0.3,0.2,0.6,0.3,0.6h1.3c0.2,0,0.3-0.3,0.3-0.6V5.3c0,0,0-0.1,0-0.1h0.2c0.3,0,0.6-0.3,0.6-0.6V2.6C4.1,2.3,3.8,2,3.5,2z");


//specify the number of columns and rows for pictogram layout
var numCols = 10;
var numRows = 5;

//padding for the grid
var xPadding = 10;
var yPadding = 15;

//horizontal and vertical spacing between the icons
var hBuffer = 9;
var wBuffer = 8;

//generate a d3 range for the total number of required elements
var myIndex = d3.range(numCols * numRows);
var myData = 27/2

//create group element and create an svg <use> element for each icon
svgDoc.append("g")
  .attr("id", "pictoLayer")
  .selectAll("use")
  .data(myIndex)
  .enter()
  .append("use")
  .attr("xlink:href", "#iconCustom")
  .attr("id", function(d) {
    return "icon" + d;
  })
  .attr("x", function(d) {
    var remainder = d % numCols; //calculates the x position (column number) using modulus
    return xPadding + (remainder * wBuffer); //apply the buffer and return value
  })
  .attr("y", function(d) {
    var whole = Math.floor(d / numCols) //calculates the y position (row number)
    return yPadding + (whole * hBuffer); //apply the buffer and return the value
  })
  .transition()
  .duration(1000)
  .style("fill", function(d) {
    if(d < myData) {
      return "steelblue"
    }

  })
作为脚注

我也在尝试遵循enter、update、exit范式,这样我就可以轻松地使用新数据进行更新,尽管这不是问题的基础,但是任何关于如何编写代码的建议都非常感谢

,如果您认为继续这样做会更好地解决问题


提前感谢您的建议/帮助

最简单的解决方案可能是使用渐变来实现半人情况,然后使用类将渐变附加到实例上,就像您对黑色和蓝色变体所做的那样

一半 { 填充:urlhalfgrad; }
最简单的解决方案可能是使用渐变来实现半人情况,然后使用类将渐变附加到实例,就像您对黑色和蓝色变体所做的那样

一半 { 填充:urlhalfgrad; }