おそらく問題は、定義したドメインにデータの全範囲が含まれていないことです。スケール ドメイン/範囲はデータ値の範囲をマッピングするために使用されるため、ドメインが [0,10] で範囲が [0,100] の場合、range(0) = 0、range(1) = 10 のような値が得られます。 , range(2) = 20... range(10) = 100 (使用するスケールの種類による)。
ドメインを範囲にマッピングするだけなので、マッピングできない値を指定すると、範囲の範囲内の値を取得する可能性は低くなります。例えば。range(11) を実行すると、0 から 100 の間の値は取得されません。範囲値は、軸とプロットが実際の svg を構築するために使用する可能性が高いため、ドメインの外側にあるポイントは終了します。あなたのプロット(またはNaNなど)から離れてください。
データ自体からドメインを導出してみてください。D3 には、これを簡単に行うための最小、最大、およびエクステント関数があります。ポイント オブジェクトの配列がある場合は、アクセサーを関数として使用して、計算で使用する正しい値を提供できます。
次に例を示します。
var data = [{x:1, y:1}, {x:2, y:4}, {x:3, y:2}, {x:4, y:1}, {x:5, y:2}];
var xExtent = d3.extent(data, function(d) { return d.x; });
var yExtent = d3.extent(data, function(d) { return d.y; });
jsFiddle を参照してください: http://jsfiddle.net/reblace/c9qw8/
あなたのフィドルを見ると、実際にプロットされているものに対して間違ったドメインを使用しているロジックにエラーがあるようです。デフォルトの最小値と最大値を取り除くと、説明している問題が修正されるようです。
function makeScales(xAxisRepresents, domainMinOverride, domainMaxOverride) {
var domainMin = d3.min(dataset, function datumToValueTransformer(datum) { return datum[xAxisRepresents]; });
var domainMax = d3.max(dataset, function datumToValueTransformer(datum) { return datum[xAxisRepresents]; });