5

以下のコードをhttp://bl.ocks.org/mbostock/3884955から特定の列を選択するように変更するにはどうすればよいですか?

var line = d3.svg.line()
.x(function(d) { return x(d.date); })
.y(function(d) { return y(d.temperature); });

d3.tsv("data.tsv", function(error, data) {
  color.domain(d3.keys(data[0]).filter(function(key) { return key !== "date"; }));

  data.forEach(function(d) {
    d.date = parseDate(d.date);
  });

  var cities = color.domain().map(function(name) {
    return {
      name: name,
      values: data.map(function(d) {
        return {date: d.date, temperature: +d[name]};
      })
    };  

  });

上記の例で使用されているデータには、日付と 3 つの都市の気温の 3 つの列の 4 つの列があります。私の使用例では、10 列があります。日付と 3 つの都市の都市ごとに 3 つの変数 (1 + [3 * 3]) です。(ツールチップで使用するために) データ セット全体を読み込みたいのですが、列インデックス # 1、4、および 7 にある都市ごとの変数の 1 つだけをグラフ化する必要があります。これを行うにはどうすればよいですか? (以下の大まかな構文を参照してください)。

var cities = color.domain().map(function(name) {
  return {
    name: name,
    values: data.map(function(d) {
      return {date: d.date, maxTemperature: *+d[arrays in column index 1, 4 and 7]*};
    })
    values2: data.map(function(d) {
      return {date: d.date, minTemperature: *+d[arrays in column index 2, 5 and 8]*};
    })
    values3: data.map(function(d) {
      return {date: d.date, avgTemperature: *+d[arrays in column index 3, 8 and 9]*};
    })
  };
});
4

3 に答える 3

1

フィルター キー条件を追加して、グラフにしたくない他のデータ カテゴリを除外することで解決できました。上記で使用した例では、都市ごとに最低、最高、平均気温があり、平均気温のみを取得したいと考えていました。「最大」または「最小」を含む文字列の列ヘッダーを除外するフィルターを追加しました。

color.domain(d3.keys(data[0]).filter(function(key) 
    { return key !== "date" && key.indexOf("max") == -1 && 
    key.indexOf("min") == -1; });

完全な列名が何であるかは必ずしもわかりませんが、私のユースケースでは、さまざまな変数が常に max、min、または avg でタグ付けされているため、これは実行可能なソリューションになりますが、列ヘッダーがまったく不明な人にはおそらくそうではありません. 最初はインデックス番号に基づいて列を選択したかったのですが、これは問題なく機能します。

于 2013-10-02T03:41:29.137 に答える
1

これは、列の選択に関して私にとってはうまくいきました:

d3.csv("data.csv", function(error, data) {
  color.domain(d3.keys(data[0]).filter(function(key) {
    return key == "avg" || key == "additional_columns"; 
  });
});
于 2014-03-22T07:11:46.520 に答える
1

既存のコードを変更する必要はありません。セットアップ方法citiesは、必要なデータに意味のある名前を付けて、後で参照することだけを必要とします。だからあなたは次のようなものを持つでしょう

var cities = color.domain().map(function(name) {
return {
  name: name,
  values: data.map(function(d) {
    return {date: d.date, first: +d[name + " first"], second: +d[name + " second"]};
  })
};

d3.min(cities, function(c) { return d3.min(c.values, function(v) { return v.first; }); });

もちろん、実際の名前はデータの内容によって異なることに注意してください。

于 2013-10-01T13:39:38.990 に答える