gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:41:28 25 4
gpt4 key购买 nike

我正在尝试将模式应用于 D3 条形图,但我得到的是:

enter image description here

  • 图表应该正好停在 100,000
  • 图案应该是“流动的”

  • 我正在使用定义如下的绿色和红色图案:

    var defs = this.svg.append("g:defs");
    defs.append("g:pattern")
    .attr("id", "红色填充")
    .attr("patternUnits", "userSpaceOnUse")
    .attr("宽度", "85")
    .attr("高度", "10")
    .append("g:image")
    .attr("xlink:href", "../10px-barchart-red.png")
    .attr("x", 0)
    .attr("y", 0)
    .attr("宽度", 85)
    .attr("高度", 10);

    var defs = this.svg.append("g:defs");
    defs.append("g:pattern")
    .attr("id", "绿色填充")
    .attr("patternUnits", "userSpaceOnUse")
    .attr("宽度", "85")
    .attr("高度", "10")
    .append("g:image")
    .attr("xlink:href", "../10px-barchart-green.png")
    .attr("x", 0)
    .attr("y", 0)
    .attr("宽度", 85)
    .attr("高度", 10);

    情节是由:

    this.svg.selectAll("rect")
    .data(数据集,getKeys)
    。进入()
    .append("rect")
    .attr('class', 'bar')
    .attr("x", function(d, i) {
    返回 x(i) + 44;
    })
    .attr("y", function(d, i) {
    返回 y(d.value);
    })
    .attr("宽度", x.rangeBand())
    .attr(“高度”,函数(d,i){
    返回高度 + 填充 - y(d.value);
    })
    .attr(“填充”,函数(d){
    如果(d.key == 0){
    返回“网址(#green-fill)”;
    } 别的 {
    返回“网址(#red-fill)”;
    }
    })

    最佳答案

    John Schulz 的这个块成功地制作了看起来很棒的图案条形图 (https://bl.ocks.org/jfsiii/7772281)。

    为了方便和永久起见,复制了以下代码段中的代码(还添加了一些动画以表明它也能很好地过渡)。

    var first = true;

    setInterval( function(){

    if(first){
    d3.select('.thing-2').transition()
    .delay(500)
    .duration(1000)
    .attr('height',20)
    .attr('y',80)
    }else{
    d3.select('.thing-2').transition()
    .delay(500)
    .duration(1000)
    .attr('height',100)
    .attr('y',0)
    }

    first = !first;

    },2500)
    <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset=utf-8 />
    <title>SVG colored patterns via mask</title>
    <style>
    /* FF seems to need explicit dimensions */
    svg {
    width: 500px;
    height: 500px;
    }

    rect.hbar {
    mask: url(#mask-stripe)
    }

    .thing-1 {
    fill: blue;
    }


    .thing-2 {
    fill: green;
    }
    </style>
    </head>
    <body>
    <svg>
    <defs>
    <pattern id="pattern-stripe"
    width="4" height="4"
    patternUnits="userSpaceOnUse"
    patternTransform="rotate(45)">
    <rect width="2" height="4" transform="translate(0,0)" fill="white"></rect>
    </pattern>
    <mask id="mask-stripe">
    <rect x="0" y="0" width="100%" height="100%" fill="url(#pattern-stripe)" />
    </mask>
    </defs>

    <!-- bar chart -->
    <rect class="hbar thing-2" x="0" y="0" width="50" height="100"></rect>
    <rect class="hbar thing-2" x="51" y="50" width="50" height="50"></rect>
    <rect class="hbar thing-2" x="102" y="25" width="50" height="75"></rect>

    <!-- horizontal bar chart -->
    <rect class="hbar thing-1" x="0" y="200" width="10" height="50"></rect>
    <rect class="hbar thing-1" x="0" y="251" width="123" height="50"></rect>
    <rect class="hbar thing-1" x="0" y="302" width="41" height="50"></rect>

    </svg>
    </body>
    </html>

    关于d3.js - 如何为 D3 条形图应用模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18962078/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com