javascript - D3.js/Dc.js 折线图中单线的不同颜色线段

标签 javascript d3.js crossfilter dc.js

我在 dc.js 中创建了一个折线图,它是基于 d3.js 构建的。我正在 y 轴上进行计数,在 x 轴上进行小时数。我希望午夜至上午 8 点期间线路为蓝色,晚上 8 点至中午 12 点为橙色,中午 12 点至下午 5 点为红色,下午 5 点至晚上 11 点为绿色。我尝试用不同的颜色创建 4 条不同的路径(下面是一个示例)。颜色确实显示出来,但它们在数据点之间添加了额外的线条,并且某些颜色会混合在一起,特别是在选择较浅的颜色时。我附上了一张我想要的线条的图像。如果有人能指出我正确的方向,我将非常感激。

var path2 = layersEnter.append("path")
        .attr("class", "line2")
        .attr("stroke", "#B31E3F")
        .attr("stroke-width", "3px")
        .attr("fill", "none");
    if (_dashStyle)
        path.attr("stroke-dasharray", _dashStyle);

    dc.transition(layers.select("path.line2"), _chart.transitionDuration())
        .attr("d", function (d) {
            var segments2 = d.points;
            //console.log("s2b: " + segments2);
            //segments2.splice(23, 1);
            //segments2.splice(22, 1);
            //segments2.splice(21, 1);
            //segments2.splice(20, 1);
            //segments2.splice(19, 1);
            //segments2.splice(18, 1);
            //segments2.splice(17, 1);
            //segments2.splice(16, 1);
            //segments2.splice(15, 1);
            //segments2.splice(14, 1);
            //segments2.splice(13, 1);
            //segments2.splice(12, 1);
            //segments2.splice(11, 1);
            //segments2.splice(10, 1);
            segments2.splice(9, 1);
            segments2.splice(8, 1);
            segments2.splice(7, 1);
            segments2.splice(6, 1);
            //segments2.splice(5, 1);
            //segments2.splice(4, 1);
            //segments2.splice(3, 1);
            //segments2.splice(2, 1);
            //segments2.splice(1, 1);
            //segments2.splice(0, 1);

            //console.log("s2a: " + segments2);
            return safeD(line(segments2));
        });

Desired Output

最佳答案

您可能考虑的一个选择是使用渐变。像这样的东西:

<svg xmlns="http://www.w3.org/2000/svg" width="100%"
  xmlns:xlink="http://www.w3.org/1999/xlink" 
  viewBox="0 0 100 100" preserveAspectRatio="none"> 

  <linearGradient id="g">
    <stop offset="0" stop-color="#008"/>
    <stop offset=".2" stop-color="#008"/>
    <stop offset=".2001" stop-color="#960"/>
    <stop offset=".5" stop-color="#960"/>
    <stop offset=".5001" stop-color="#800"/>
    <stop offset=".8" stop-color="#800"/>
    <stop offset=".8001" stop-color="#080"/>
    <stop offset="1" stop-color="#080"/>
  </linearGradient> 

  <path d="M 3 48 30 50 50 78 97 22" stroke-width="4" stroke="url(#g)" fill="none"/>
</svg>

玩一下here

svg 应该足够简单,可以使用 D3 创建,但是有一些问题,例如我在某些浏览器上看到了问题,其中渐变 id 不是整个页面唯一的。

另请注意,有一些方法可以控制渐变如何映射到您的路径,您可以了解 here

关于javascript - D3.js/Dc.js 折线图中单线的不同颜色线段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21143651/

相关文章:

javascript - throw er;//未处理的 'error'事件-NodeJS

javascript - classed() 和 attr ("class"之间的区别)

javascript - 如何检查数组以查看其中是否有值,javascript

javascript - Crossfilter 对过滤后的维度进行分组

dc.js - 使用 dc.js 和 crossfilter 的面积图

javascript - 在 Crossfilterjs 中使用组的意外行为

JavaScript/Node.JS 将对象转换为数组

javascript - 尝试为我的 chartjs 和 googlecharts 使用 axios、vuejs 和虚拟 api(仅获取请求)

d3.js - 重新加载 TSV 文件而不刷新页面

javascript - 如何保存 HTML 中的更改?