我正在使用d3 v4。我想创建一个折线图,其中图形下方的区域是一个区域,由从顶部的暗处到底部的浅处的渐变填充。我认为这是配置这种渐变的方法
svg.append("linearGradient")
.attr("id", "area-gradient")
.attr("gradientUnits", "userSpaceOnUse")
.attr("x1", 0).attr("y1", y(0))
.attr("x2", 0).attr("y2", y(1000))
.selectAll("stop")
.data([
{offset: "0%", color: "navy"},
{offset: "30%", color: "navy"},
{offset: "45%", color: "navy"},
{offset: "55%", color: "navy"},
{offset: "60%", color: "navy"},
{offset: "100%", color: "navy"}
])
.enter().append("stop")
.attr("offset", function(d) { return d.offset; })
.attr("stop-color", function(d) { return d.color; });
并使用此风格
.area {
fill: url(#area-gradient);
stroke-width: 0px;
}
但正如你从我的小提琴 - https://jsfiddle.net/yw46ycse/3/中看到的那样,我所拥有的却是一个坚实的领域。还需要做些什么才能使图表下方的区域成为渐变?
答案 0 :(得分:2)
要解决的几个问题:
.attr("gradientUnits", "userSpaceOnUse")
会更好。通过使用objectBoundingBox(https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/gradientUnits)的默认设置,您可以使用0,0 0,1来指定垂直线性渐变。例如:
svg.append("linearGradient")
.attr("id", "area-gradient")
.attr("x1", 0).attr("y1", 0)
.attr("x2", 0).attr("y2", 1)
.selectAll("stop")
.data([
{offset: "0%", color: "navy"},
{offset: "100%", color: "red"}
])
.enter().append("stop")
.attr("offset", function(d) { return d.offset; })
.attr("stop-color", function(d) { return d.color; })
答案 1 :(得分:2)
这是您要寻找的解决方案的版本吗?您可以使用透明作为停止颜色{offset: "95%", color: "transparent"}
。
这是你小提琴的修改版本,我曾经根据你的需要制作它。
https://codepen.io/Nasir_T/pen/OjOWxz
希望这有帮助。