D3.js 如何为D3条形图应用模式?

D3.js 如何为D3条形图应用模式?,d3.js,D3.js,我试图将一种模式应用于D3条形图,但得到的结果是: 图表应该正好停在100000处 模式应该是“流动的” 我使用的绿色和红色图案定义如下: var defs = this.svg.append("g:defs"); defs.append("g:pattern") .attr("id", "red-fill") .attr("patternUnits", "userSpaceOnUse") .attr("width", "85") .attr("heig

我试图将一种模式应用于D3条形图,但得到的结果是:

  • 图表应该正好停在100000处
  • 模式应该是“流动的”
我使用的绿色和红色图案定义如下:

var defs = this.svg.append("g:defs"); defs.append("g:pattern") .attr("id", "red-fill") .attr("patternUnits", "userSpaceOnUse") .attr("width", "85") .attr("height", "10") .append("g:image") .attr("xlink:href", "../10px-barchart-red.png") .attr("x", 0) .attr("y", 0) .attr("width", 85) .attr("height", 10); var defs = this.svg.append("g:defs"); defs.append("g:pattern") .attr("id", "green-fill") .attr("patternUnits", "userSpaceOnUse") .attr("width", "85") .attr("height", "10") .append("g:image") .attr("xlink:href", "../10px-barchart-green.png") .attr("x", 0) .attr("y", 0) .attr("width", 85) .attr("height", 10); var defs=this.svg.append(“g:defs”); 定义追加(“g:模式”) .attr(“id”,“红色填充”) .attr(“patternUnits”、“userSpaceOnUse”) .attr(“宽度”、“85”) .attr(“高度”、“10”) .append(“g:image”) .attr(“xlink:href”,“./10px条形图red.png”) .attr(“x”,0) .attr(“y”,0) .attr(“宽度”,85) .attr(“高度”,10); var defs=this.svg.append(“g:defs”); 定义追加(“g:模式”) .attr(“id”,“绿色填充”) .attr(“patternUnits”、“userSpaceOnUse”) .attr(“宽度”、“85”) .attr(“高度”、“10”) .append(“g:image”) .attr(“xlink:href”,“./10px条形图绿色.png”) .attr(“x”,0) .attr(“y”,0) .attr(“宽度”,85) .attr(“高度”,10); 该图由以下内容组成:

this.svg.selectAll("rect") .data(dataset, getKeys) .enter() .append("rect") .attr('class', 'bar') .attr("x", function(d, i) { return x(i) + 44; }) .attr("y", function(d, i) { return y(d.value); }) .attr("width", x.rangeBand()) .attr("height", function(d, i) { return height + padding - y(d.value); }) .attr("fill", function(d) { if (d.key == 0) { return "url(#green-fill)"; } else { return "url(#red-fill)"; } }) this.svg.selectAll(“rect”) .data(数据集、getKeys) .输入() .append(“rect”) .attr('class','bar') .attr(“x”,函数(d,i){ 返回x(i)+44; }) .attr(“y”,函数(d,i){ 返回y(d值); }) .attr(“宽度”,x.rangeBand()) .attr(“高度”,函数(d,i){ 返回高度+填充-y(d值); }) .attr(“填充”,功能(d){ 如果(d.key==0){ 返回“url(#绿色填充)”; }否则{ 返回“url(#红色填充)”; } })
约翰·舒尔茨(John Schulz)的这一块成功地制作出了看起来非常棒的条形图()

为了方便和永久性,复制了下面代码片段中的代码(还添加了一些动画,以显示它也能很好地转换)

var first=true;
setInterval(函数(){
如果(第一){
d3.选择('.thing-2').transition()
.延迟(500)
.持续时间(1000)
.attr('height',20)
.attr('y',80)
}否则{
d3.选择('.thing-2').transition()
.延迟(500)
.持续时间(1000)
.attr('height',100)
.attr('y',0)
}
第一个=!第一个;
},2500)

SVG通过遮罩显示彩色图案
/*FF似乎需要明确的维度*/
svg{
宽度:500px;
高度:500px;
}
矩形hbar{
掩码:url(#掩码条带)
}
.事情-1{
填充:蓝色;
}
.第二件事{
填充:绿色;
}

看起来您用于“y”的刻度可能有问题。标尺是否输出d.value的预期位置?对于图案,您需要确保条形图与图像尺寸匹配,或者图像可平铺。D3对此无能为力。