D3とNVD3にはこれを行う機能がありません。あなたの最善の策はあなたの欠けている値を挿入することです。いくつかのUnderscoreユーティリティを使用するCoffeeScriptでもd3には同じ機能が多数あるため、必要がない場合はUnderscoreに依存する必要はありません。最初にドメイン値のリストを取得し、欠損値を挿入します。
メソッドgetDomainValuesは、データと次元(キー)を取り込み、すべての値を取得して一連のドメイン値を取得します。あなたのようなデータを持っていた場合:
key : a
values : [ {x: 4, y:1}, {x: 5, y:1}, {x: 7, y:1} ]
key : b
values : [ {x: 1, y:10}, {x: 2, y:5}, {x: 3, y:0} ]
をそれは返します:
[1,2,3,4,5,7]
getDomainValues = (data, dimension) ->
_.uniq _.flatten _.map data, (item) -> _.pluck(item.values, dimension)
次元のための方法insertValues挿入のデフォルト値(最も一般的に0を) values配列に存在しない値。次元別にソートします。あなたのようなデータがあった場合 :
key : a
values : [ {x: 4, y:1}, {x: 2, y:1}, {x: 1, y:1} ]
をし、ドメイン[0、1,2,3,4,5] -10の値を与え、あなたは取得したい:
key : a
values : [ {x: 0, y:-10}, {x: 1, y:1}, {x: 2, y:1}, {x: 3, y:-10}, {x: 4, y:1}, {x: 5, y: -10}]
insertValues = (data, value, dimension, metric, domain)->
defaults = {}
for item in domain
v = {}
v[dimension] = item
v[metric] = value
defaults[item] = v
_.each data, (item) ->
vals = _.groupBy(item.values, (i) -> i[dimension])
vals = _.flatten _.values _.defaults vals, defaults
vals = _.sortBy vals, dimension
item.values = vals
data
だから、このようにそれらを呼ぶかもしれない:
data = [
{ key:"line 1", values: [ {x:1, y:1}, {x:2, y:2} ] },
{ key:"line 2" , values: [ {x:1, y:1}, {x:2, y:2}, {x:3, y:3} ] }
]
domain = getDomainValues data, 'x'
filledData = insertValues data, 0, 'x', 'y', domain
JavaScriptで表示:https://gist.github.com/FaKod/e6724675e4ebaf9f8fa4
これはJSが行うものではありませんが、nvd3.js APIにはこれを有効にする設定が含まれている場合があります。 3番目の要素を挿入するJavaScriptを記述することは可能ですが、まずnvd3 APIで設定を確認します。 –
(あなたのラインを描くために使用しているものは教えていない) d3の 'd3.svg.line()'関数を使用してパスを描画している場合は、配列内の要素よりも多くの点を描画するように組み込みの方法はありません。ここには 'defined()'メソッドがありますが、事前に定義されていない要素で配列を埋める必要があります。私はまた、nvd3がこれを処理する何かを持っているが、チェックしていないことを疑う。 – meetamit
@AndrewGibson、私は現在、nullデータポイントを埋めるためのプログラム的なアプローチを持っていますが、あなたが示唆したようにD3 APIから使用できる設定や関数を期待していました。まだそれを見つけることがまだありません... –