我已经将一个使用“圆形表盘”的水图表转换成了矩形条形图,但是剪辑路径没有完全采用图表的高度。
//问题
//问题
1. The axis text does not wrap cleanly -- I need it to do so to make it legible.
2. The rectangle is more of a square -- it needs to be more "bar chart" like - consume more vertical space but render correctly.
--这两个jsfiddles的区别仅在于config1.fillShape参数。--矩形/圆形
//损坏的条形版本
http://jsfiddle.net/0ht35rpb/132/
//工作正常的旧圆表版
http://jsfiddle.net/0ht35rpb/133/
剪辑区域的核心功能-clipArea和drawShapeWave
clipArea函数
// The clipping wave area.
const clipArea = d3.area()
.x(function(d) {
return waveScaleX(d.x);
})
.y0(function(d) {
return waveScaleY(Math.sin(Math.PI * 2 * config.waveOffset * -1 + Math.PI * 2 * (1 - config.waveCount) + d.y * 2 * Math.PI));
});
if (config.fillShape == "circle") {
clipArea
.y1(function(d) {
return (fillCircleRadius * 2 + waveHeight);
});
} else {
clipArea
.y1(function(d) {
return (fillCircleRadius * 2 + waveHeight);
});
//.y1(function(d) { return (config.height - (fillCircleRadius * 2) + waveHeight); } );
}
还有drawShape
var drawShapeWave = function(shape) {
// Draw the wave shape.
if (shape == "circle") {
fillGroup.append("circle")
.attr("cx", radius)
.attr("cy", radius)
.attr("r", fillCircleRadius);
} else {
fillGroup.append("rect")
.attr("x", radius - fillCircleRadius)
.attr("y", radius - fillCircleRadius)
.attr("width", fillCircleRadius * 2)
.attr("height", fillCircleRadius * 2)
//.attr("height", config.height - (fillCircleRadius * 2));
}
fillGroup
.style("fill", config.waveStartColor)
.transition()
.duration(config.waveColorDuration)
.style("fill", config.waveColor);
}
//也许这个代码示例有解决方案。
http://jsfiddle.net/NYEaX/1860/
更新
我已经删除了一些代码,只留下了正方形水图表本身。
http://jsfiddle.net/0ht35rpb/141/
我创建了一个版本,其中半径是高度的一半 - 就在顶部 - 因此它创建了一个巨大的正方形 - 只是被剪辑了 - 但这不是非常干净的 - 并且仍然有点 aloof 在正确控制剪切路径上。
http://jsfiddle.net/0ht35rpb/145/
更新2--2017年12月9日
我将容器和波浪放置在单独的g元素中--宽度从70到90似乎很稳定--但超过那个范围,它开始崩溃..如果您可以解密出错了什么-提供一个文档完整的答案-赏金归您。
fillCircleRadius
。 - Terry