使用 D3 的两条线之间的阴影区域
Shade area between two lines using D3
我正在尝试对两条线之间的区域进行阴影(垂直)。我曾尝试使用剪辑路径并用矩形遮盖周围环境,但它没有得到我想要的。我在网上找到的许多解决方案只处理另一条线,但就我而言,这些线将始终并排。这是我的代码:
var width = 500;
var height = 500;
var data = [
{
// line1 data
x:[268, 293, 251, 287, 265, 269, 253, 251, 253, 260],
y:[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
},
{
// line2 data
x:[232, 207, 249, 213, 235, 231, 247, 249, 247, 240],
y:[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
}
];
var yscale = d3.scale.linear()
.range([height, 0])
.domain([0,10]);
var svg = d3.select("#chart").append('svg').style('width', width).style('height', height)
.append('g');
var area = d3.svg.area()
.x(function(d,i){return d[0]})
.y0(0)
.y1(function(d){return yscale(d[1])});
var areaunder = d3.svg.area()
.x(function(d,i){return d[0]})
.y0(height)
.y1(function(d){return yscale(d[1])});
console.log( data[0].x );
var max = d3.max(data[0].x);
var rectWidth = (max - width/2) * 2;
console.log(rectWidth);
var xpos = width/2 - (width/2 - d3.min(data[1].x));
var ypos = 0;
console.log(xpos);
//svg.append('rect')
// .attr('x', xpos)
// .attr('y', ypos)
// .attr('width', rectWidth)
// .attr('height', height)
// .attr('fill', 'red');
var line = d3.svg.line()
.interpolate("cardinal")
.x(function(d,i){return d[0]})
.y(function(d){return yscale(d[1])});
var areas = svg.selectAll('.area')
.data( data.map(function(d) {return d3.zip(d.x, d.y);}) )
.enter().append('g')
.attr("class", 'area');
//areas.append('path')
//.attr('d', function(d){return area(d);});
//areas.append('path')
//.attr('d', function(d){return areaunder(d);})
// svg.append('path')
// .datum( data.map(function(d) {return d3.zip(d.x, d.y);}) )
// .attr("class", 'area')
// .attr("d", area);
var lines = svg.selectAll(".lines")
.data(data.map(function(d) {return d3.zip(d.x, d.y);}))
.enter().append("g")
.attr('class', "lines")
lines.append('path')
.attr('class', 'pathline')
.attr('stroke', 'black')
.attr("fill", "none")
.attr('d', function(d){return line(d)})
和JSFIDDLE
我能够通过指定面积生成器的 x0、x1、y0 和 y1 来解决这个问题。用于填充行间区域的代码:
var indexies = d3.range( data[0].x.length );
var area = d3.svg.area()
.interpolate("cardinal")
.x0( function(d) { return data[1].x[d] } )
.x1( function(d) { return data[0].x[d] } )
.y0( function(d) { return yscale(data[1].y[d]) } )
.y1( function(d) { return yscale(data[1].y[d]) } );
svg.append('path')
.datum(indexies)
.attr('class', 'area')
.attr('d', area);
更新 jsfiddle。
.
相关文章:
- onkeyup无法动态创建多个文本区域
- FabricJs-限制主对象内添加对象的移动区域
- 带有填充属性的SVG矩形显示在包含元素的上方插入框阴影
- 具有所有样式的文本正在复制到可编辑文本区域
- 如何为高图中的区域线创建z索引
- 在文本区域POST后解码JSON
- 在文本区域中使用jQuery.text()保持换行符
- ng在下拉列表和文本区域提交
- 使用fabric.js从矩形区域获取对象,并将该区域绘制到画布上
- 当用户按下回车键时,自动在text区域/text中插入消息
- 将文本插入光标所在的文本区域
- 离开页面导航后保留文本区域内容
- 不能在图像中的地图标记中使用花式框jquery插件的区域标记
- Javascript-在文本区域中断,但不在段落中中断
- 当选择值x时,Javascript需要在正确的位置显示文本区域,从而循环通过具有选择选项的表单
- 测试文本区域中的特定文本格式
- 画布中绘制的矩形区域的弹出工具提示
- 使用 D3 的两条线之间的阴影区域
- 绘制正态分布曲线,左下角区域在 javascript 中带有阴影
- 当我点击区域的时候,我怎么让它们变成阴影呢?