2

私はd3の初心者ですが、2つの配列の外積を単純に作成するのに問題があることを認めて申し訳ありません。私は実際にCubismを使用して、非常に単純なことを行っています。タイプごとに、いくつかの集計を生成します。

私の試み:

var aggs = [
    {title: 'mean', metric: function(d) { return cube.metric("sum(" + d +  (value))").divide(cube.metric("sum(" + d + ")")); }},
    {title: 'count', metric: function(d) { return cube.metric("sum(" + d + ")").divide(step / 1e3); }}
]

d3.json(origin + "/1.0/types", function(types) {    
    d3.select("body").insert("div", ".bottom")
    .attr("class", "group")
    .selectAll(".typegrp")
    .data(types)
    .enter()
    .append("div")
    .attr("class", "typegrp")
    .selectAll("div")
    .data(aggs)
    .enter()
    .append("div")
    .attr("class","horizon")
    .call(context.horizon()
        .title(function(d) { return d.title; })
        .metric(function(d) { return d.metric(FOOOO); })
     );
});

わからない部分は「FOOOO」の部分です。'inner'コンテキスト('aggs'の行)から'outer'コンテキスト('types'の行)にアクセスするにはどうすればよいですか?

前もって感謝します。

編集:以下のニックによって提案された完全な実例があります。

var aggs = [
            {title: 'mean',  metric: function(d) { return cube.metric("sum(" + d + "(value))").divide(cube.metric("sum(" + d + ")")); }},
            {title: 'sum',   metric: function(d) { return cube.metric("sum(" + d + "(value))"); }},
            {title: 'count', metric: function(d) { return cube.metric("sum(" + d + ")"); }},
            {title: 'max',   metric: function(d) { return cube.metric("max(" + d + "(value))"); }},
            {title: 'min',   metric: function(d) { return cube.metric("min(" + d + "(value))"); }}
        ]

d3.json(origin + "/1.0/types", function(types) {    
    d3.select("body")
    .insert("div", ".bottom")
    .attr("class", "group")
    .selectAll(".typegrp")
    .data(types)
    .enter()
    .append("div")
    .attr("class", "typegrp")
    .each(function(type) {
        d3.select(this)
        .selectAll("div.horizon")
        .data(aggs)
        .enter().append("div")
        .attr("class","horizon")
        .each(function(agg) {
            d3.select(this)
            .call(context.horizon()
                .title(agg.title + " " + type)
                .metric(agg.metric(type))
            );
        });
    });
});
4

1 に答える 1

2

私は Cubism を使用していませんが、ここには 2 つのオプションがあると思います。

  1. 集計メトリクスが 2 つしかない場合の簡単なオプション - データ結合を行わず、それらを個別に追加するだけです。

    var typeGroups = d3.select("body").insert("div", ".bottom")
        .attr("class", "group")
      .selectAll(".typegrp")
        .data(types);
    
    typeGroups.enter()
      .append("div")
        .attr("class", "typegrp");
    
    typeGroups
      .append("div")
        .attr("class","horizon")
        .call(context.horizon()
            .title('mean')
            .metric(function(d) { return cube.metric( ... ); })
        );
    
    typeGroups.
      .append("div")
        .attr("class","horizon")
        .call(context.horizon()
            .title('count')
            .metric(function(d) { return cube.metric( ... ); })
        );
    
  2. .each少し難しいオプション -呼び出し内で aggs 配列に参加します。

    typeGroups.enter()
      .append("div")
        .attr("class", "typegrp")
        .each(function(type) {
            d3.select(this).selectAll("div.horizon")
                .data(aggs)
              .enter().append("div")
                .attr("class","horizon")
                .each(function(agg) {
                    d3.select(this)
                        .call(context.horizon()
                            .title(agg.title)
                            .metric(agg.metric(type))
                        );
                });
        });
    

    typeこれにより、呼び出し時に変数にアクセスできますcontext.horizon()

于 2012-09-26T22:07:16.253 に答える