mbeasley のものに似た別の例を次に示します。まず、あなたのデータを少しだけマッサージしました。値の配列がある場合に最適に機能し、キーを使用してname
およびvalues
プロパティに簡単にアクセスできるようにしました。
var data = [
{name: 'John', values: [0,1,3,9, 8, 7]},
{name: 'Harry', values: [0, 10, 7, 1, 1, 11]},
{name: 'Steve', values: [3, 1, 4, 4, 4, 17]},
{name: 'Adam', values: [4, 77, 2, 13, 11, 13]}
];
一般にd3
、実際のグラフのサイズと周囲の余白を決定するこのようなグラフを設定します。
var margin = {top: 20, right: 80, bottom: 30, left: 50},
width = 640 - margin.left - margin.right,
height = 380 - margin.top - margin.bottom;
次に、データに基づいてスケールを作成できます。作成する必要はありませんが、値をポイントに変換することで、チャート上の要素の配置がはるかに簡単になります。はdomain
データrange
の最小値と最大値であり、 はグラフのサイズの最小値と最大値です。が逆になり、左下隅に (0,0) が配置されることに注意してください (通常、y 軸の 0 は上部にあります range
) 。y axis
var x = d3.scale.linear()
.domain([0, d3.max(data, function(d) { return d.values.length - 1; })])
.range([0, width]);
var y = d3.scale.linear()
.domain([d3.min(data, function(d) { return d3.min(d.values); }),
d3.max(data, function(d) { return d3.max(d.values); })])
.range([height, 0]);
d3
には、カラー スケールを自動的に作成する機能がいくつかあります。使いたいキーと色の数を設定するだけです(10色と20色のオプションがあると思います)。
var color = d3.scale.category10()
.domain(d3.keys(data[0]).filter(function(key) { return key === "name"; }));
ここでは、スケールを使用して x 軸と y 軸を設定します。軸にはさまざまなオプションがあります。TickFormat は目盛りの外観を変更するのに便利で、d3.format
多くの異なるオプションがあるため、カスタム フォーマッタを作成する必要はほとんどありません。
var xAxis = d3.svg.axis()
.scale(x)
.tickFormat(d3.format('d'))
.orient("bottom");
var yAxis = d3.svg.axis()
.scale(y)
.orient("left");
ここでは、線の描画方法を知っている再利用可能な関数を作成します。後で各人の各データポイントを line 関数に渡します。d
は、グラフ化している現在の値のセットを保持し、i
元のデータ配列内の現在の値のインデックスであることに注意してください。
var line = d3.svg.line()
.interpolate("basis")
.x(function(d, i) { return x(i); })
.y(function(d, i) { return y(d); });
最後に、チャートへの追加を開始できます。まず、メインの svg 要素を作成して配置します。
var svg = d3.select("#chart").append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
次に、各軸を追加します。
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
svg.append("g")
.attr("class", "y axis")
.call(yAxis);
各人物にグループ ( g
) を追加し、データをグループに関連付けます。線を引くときにこのデータを使用します。class
必要に応じて後でチャートのスタイルを設定できるように、を提供します。
var people = svg.selectAll(".people")
.data(data)
.enter().append("g")
.attr("class", "people");
そして最後に一人一人に線を引きます。
people.append("path")
.attr("class", "line")
.attr("d", function(d) { return line(d.values); })
.style("stroke", function(d) { return color(d.name); });
あなたのデータを使用して、負の値がある場合のグリッドの描画に関する別の質問に答えました。そのグラフはhttp://jsfiddle.net/2y3er/2/で見ることができます。