d3.js - 带点的 D3 条形图背景

标签 d3.js

我发现这个 d3 示例显示了一个带有纯色背景和对角线图案的条形图。我试图通过修改“d”属性来修改它以显示点、实心、白色圆圈而不是线条,但我认为可能有更好的方法来做到这一点。

这是我的显示对角线的 fiddle :

http://jsfiddle.net/ljp007/gruc1vod/1/

var svg = d3.select("body").append("svg");

svg
  .append('defs')
  .append('pattern')
    .attr('id', 'diagonalHatch')
    .attr('patternUnits', 'userSpaceOnUse')
    .attr('width', 4)
    .attr('height', 4)
  .append('path')
    .attr('d', 'M-1,1 l2,-2 M0,4 l4,-4 M3,5 l2,-2')
    .attr('stroke', '#fff')
    .attr('stroke-width', 1);

svg.append("rect")
      .attr("x", 0)
      .attr("width", 100)
      .attr("height", 100)
      .style("fill", 'blue');

svg.append("rect")
    .attr("x", 0)
    .attr("width", 100)
    .attr("height", 100)
    .attr('fill', 'url(#diagonalHatch)');

这就是我要实现的目标:

enter image description here

这些点不绘制数据,而只是为了将此条与图表中的其他条区分开来。如何将线转换为点以实现此目的?

最佳答案

不要向填充图案添加路径,而是添加几个圆圈,并稍微修改图案的大小。

var svg = d3.select("body").append("svg");

var pattern = svg.append('defs')
  .append('pattern')
    .attr('id', 'dots')
    .attr('patternUnits', 'userSpaceOnUse')
    .attr('width', 12)
    .attr('height', 12);

pattern.append('circle')
  .attr('cx', 2)
  .attr('cy', 2)
  .attr('r', 2)
  .attr('fill', 'white');

pattern.append('circle')
  .attr('cx', 8)
  .attr('cy', 8)
  .attr('r', 2)
  .attr('fill', 'white');

svg.append("rect")
  .attr("x", 0)
  .attr("width", 100)
  .attr("height", 100)
  .style("fill", 'blue');

svg.append("rect")
  .attr("x", 0)
  .attr("width", 100)
  .attr("height", 100)
  .attr('fill', 'url(#dots)');

cxcy 属性设置圆心的 x 和 y 坐标,而 r 属性设置它的半径。

您还可以在圆圈之前的图案中附加一个蓝色实心矩形,从而无需在图表中创建背景和覆盖矩形。您可以将任何基本形状添加到图案中,当您使用它进行填充时,它们将连同它们的样式一起重复出现。

var svg = d3.select("body").append("svg");

var pattern = svg.append('defs')
  .append('pattern')
    .attr('id', 'dots')
    .attr('patternUnits', 'userSpaceOnUse')
    .attr('width', 12)
    .attr('height', 12);

pattern.append('rect')
  .attr('x', 0)
  .attr('y', 0)
  .attr('width', 12)
  .attr('height', 12)
  .attr('fill', 'blue');

pattern.append('circle')
  .attr('cx', 2)
  .attr('cy', 2)
  .attr('r', 2)
  .attr('fill', 'white');

pattern.append('circle')
  .attr('cx', 8)
  .attr('cy', 8)
  .attr('r', 2)
  .attr('fill', 'white');

// Now the pattern can be used and re-used to fill any shapes.

svg.append('rect')
  .attr('x', 0)
  .attr('width', 100)
  .attr('height', 100)
  .attr('fill', 'url(#dots)');

svg.append('circle')
  .attr('cx', 160)
  .attr('cy', 50)
  .attr('r', 50)
  .attr('fill', 'url(#dots)');

给出:

Example of Patterns

关于d3.js - 带点的 D3 条形图背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50320092/

相关文章:

javascript - d3 拖动和缩放不起作用

包含在 HTML 页面中的 Javascript D3 树可视化

javascript - 将标记旋转为多彩圆圈

javascript - 无法读取未定义的属性 'pack'

jquery - 使用 d3 对整个(变化的)对象求和

d3.js - 基于文本框的交叉过滤器

javascript - 如何添加一个简单的鼠标悬停信息窗口

javascript - 将 Clusterfck 数组转换为 JavaScript InfoVis Toolkit json 层次结构

javascript - 剪切矩形未在响应式图表中调整大小

javascript - d3 float 气泡图