访问成对条形图中的键/值-D3.js

访问成对条形图中的键/值-D3.js,d3.js,bar-chart,key-value,javascript-objects,D3.js,Bar Chart,Key Value,Javascript Objects,我试图在我的JS对象/数组中,在全局和局部之间创建一个成对的条形图。我以前在D3中制作过条形图,但没有使用对象。我发现很难获得正确的数据 最终,关键字数据将在axis中使用。cpc将用作工具提示 以下是我目前掌握的代码:() 目前,该图表尚未填充。我假设我没有正确地访问值。我只是试图从glob获取数据,以确保我正确地访问了内容,然后从那里我将填充这两个系列,等等。我的问题是没有正确地访问键/值吗?看看这个: 通过将.data(dataset,glob)更改为.data(dataset.glob)

我试图在我的JS对象/数组中,在全局和局部之间创建一个成对的条形图。我以前在D3中制作过条形图,但没有使用对象。我发现很难获得正确的数据

最终,关键字数据将在axis中使用。cpc将用作工具提示

以下是我目前掌握的代码:()

目前,该图表尚未填充。我假设我没有正确地访问值。我只是试图从glob获取数据,以确保我正确地访问了内容,然后从那里我将填充这两个系列,等等。我的问题是没有正确地访问键/值吗?

看看这个:

通过将
.data(dataset,glob)
更改为
.data(dataset.glob)
,然后将
d.glob
更改为
+d
以获得三个条形图,分别表示“y”属性、“高度”属性和yScale.domain


为了能够在全局和本地之间切换,您可能需要重新构造数据。

I“我知道我的JSFIDLE还不能工作。这也是我发帖的部分原因。干得好。我试过类似的东西,但不是
+d
部分。我想我刚回来。那么,这仅仅是连接吗?在全局和局部之间切换意味着什么,您可能需要重新构造数据?最后,我计划将全局和局部配对到一个集合中,并使它们以成对条形图的形式并排显示。RE+d-是的,它将根据情况连接或返回NaN。至于数据结构评论,我误解了你的目的。在你的另一个问题上,我留下了关于d3数据结构的较长评论。
var w = 600;
var h = 400;

var colors = ["#377EB8", "#4DAF4A"];

var dataset = {"keyword": ["payday loans", "title loans", "personal loans"],
            "glob": ["1500000", "165000", "550000"],
            "local": ["673000", "165000", "301000"],
            "cpc": ["14.11", "12.53", "6.14"]   
};


var series = 2; // Global & Local

var x0Scale = d3.scale.ordinal()
            .domain(d3.range(dataset.glob.length))
            .rangeRoundBands([0, w], 0.05); 


var yScale = d3.scale.linear()
            .domain([0, d3.max(dataset, function(d) {return d.glob;})]) 
            .range([0, h]);

var glob = function(d) {
    return d.glob;
};

//SVG element
var svg = d3.select("#searchVolume")
        .append("svg")
        .attr("width", w)
        .attr("height", h);     

// Graph Bars
svg.selectAll("rect") 
    .data(dataset, glob) //access the series here?
    .enter()
    .append("rect")
    .attr("x", function(d, i){
        return x0Scale(i);
    })
    .attr("y", function(d) {
        return h - yScale(d.glob);
    })
    .attr("width", x0Scale.rangeBand())
    .attr("height", function(d) {
        return yScale(d.glob); // ***************
    })
    .attr("fill", colors[1]);