javascript - D3.js 从单独的文件中绘制多个数据集

标签 javascript d3.js

我正在尝试使用来自两个 tsv 文件的两组数据绘制散点图。但是,每个都以单一刻度共享 x 轴。有两个 y 轴,每个轴都有自己的刻度。 The graph我现在拥有的图表将在视觉上有所帮助。

问题是,第二个数据集(橙色)仅部分绘制在 a 轴上约 15,000 处的污点处。它真的应该是一条更大的线。此外,当我运行它时,有时会呈现第二个数据集,而现在会呈现第一个数据集。不知道为什么会这样..

这是两个(可能)相关的代码块:

    //1st data set
    d3.tsv("datatest4.tsv", function(error, tsv1) {

        tsv1.forEach(function(d) {
            d.altit = +d.altit;
            d.tmp = +d.tmp;

        });

        x.domain(d3.extent(tsv1, function(d) { return d.altit; })).nice();
        y.domain(d3.extent(tsv1, function(d) { return d.tmp; })).nice();

        svg.append("g")
            .attr("class", "x axis")
            .attr("transform", "translate(0," + height + ")")
            .call(xAxis)
            .append("text")
            .attr("class", "label")
            .attr("x", width)
            .attr("y", -6)
            .style("text-anchor", "end")
            .text("Altitude (m)");

        svg.append("g")
            .attr("class", "y axis axis1")
            .call(yAxis)
            .append("text")
            .attr("class", "label")
            .attr("transform", "rotate(-90)")
            .attr("y", 6)
            .attr("dy", ".71em")
            .style("text-anchor", "end");

        svg.selectAll(".dot")
            .data(tsv1)
            .enter().append("circle")
            .attr("class", "dot")
            .attr("r", 1)
            .attr("cx", function(d) { return x(d.altit); })
            .attr("cy", function(d) { return y(d.tmp); })
            .style("fill","steelblue");

    });

    //2nd data set
    d3.tsv("datatest2.tsv", function(error, tsv2) {

        tsv2.forEach(function(dd) {
            dd.alti = +dd.alti;
            dd.pressure = +dd.pressure;
        });

        x2.domain(d3.extent(tsv2, function(dd) { return dd.alti; })).nice();
        y2.domain(d3.extent(tsv2, function(dd) { return dd.pressure; })).nice();

        svg.append("g")
            .attr("class", "x axis")
            .attr("transform", "translate(0," + height + ")")
            .call(xAxis2)
            .attr("x", width)
            .attr("y", -6)
            .text("Altitude (m)");

        svg.append("g")
            .attr("class", "y axis axis2")
            .call(yAxis2)
            .append("text")
            .attr("class", "label")
            .attr("transform", "rotate(-90)")
            .attr("y", 6)
            .attr("dy", ".71em")
            .style("text-anchor", "end");

        svg.selectAll(".dot")
            .data(tsv2)
            .enter().append("circle")
            .attr("class", "dot")
            .attr("r", 1)
            .attr("cx", function(dd) { return x2(dd.alti); })
            .attr("cy", function(dd) { return y2(dd.pressure); })
            .style("fill","orange");    

    });

最佳答案

问题是您对每个数据集 .data(tsv1) 使用相同的选择器 svg.selectAll(".dot") >.data(tsv2).

D3 认为第二组应该取代第一组。您可以通过为每种类型的点分配一个唯一的类来修复它。

    svg.selectAll(".blue.dot")// Select specifically blue dots
        .data(tsv1)
        .enter().append("circle")
        .attr("class", "blue dot")// Assign two classes
        ...

    svg.selectAll(".orange.dot")
        .data(tsv2)
        .enter().append("circle")
        .attr("class", "orange dot")
        ...

关于javascript - D3.js 从单独的文件中绘制多个数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13715900/

相关文章:

javascript - 如何使用 javascript 转义 "innerHtml"属性中的 html?

javascript - SailsJS 日志请求参数

javascript - react 中的 CORS 请求

javascript - D3 中 jQuery 的 $ (".cell:first") 是什么?

javascript - D3js使文本标签可拖动

svg - Circle-packing diagram - 两组值之间的转换

javascript - d3 通过更改参数化函数水平制作线图动画

javascript - 使用单页应用程序(Angular)在上下文结帐中使用 PayPal

javascript - Angularjs ng-repeat 并不总是在 $last 上触发

javascript - 在正交拖动上隐藏圆圈