Jsonファイルからデータをロードし、d3js v4のキャンバスタグ内にそのラインを印刷したいとします。 同じコードがTSVファイルで動作していましたが(明らかにrequestTsvのrequestJsonが変更されています)、JSONを使用することはできません。キャンバスd3jsのJsonデータとプロットラインにアクセスできない
編集: Gerardoのおかげで、TSVがオブジェクト{x:value、y:value}で構成されていることがわかりました.Jsonは2つの配列を持つオブジェクトです。 Jsonファイルのxとy配列?
私は何かが間違ってここにあると確信している:
d3.requestJson("dato.json", function(d) {
d.x = +d.x;
d.y = +d.y;
return d;
}, function(error, data) {
if (error) throw error;
x.domain(d3.extent(data, function(d) { return d.x; }));
y.domain(d3.extent(data, function(d) { return d.y; }));
context.beginPath();
line(data);
context.lineWidth = 1.5;
context.strokeStyle = "steelblue";
context.stroke();
});
これは、JSONファイルである:これは
<!DOCTYPE html>
<meta charset="utf-8">
<canvas width="960" height="500"></canvas>
<script src="//d3js.org/d3.v4.0.0-alpha.4.min.js"></script>
<script>
var canvas = document.querySelector("canvas"),
context = canvas.getContext("2d");
var margin = {top: 20, right: 20, bottom: 30, left: 50},
width = canvas.width - margin.left - margin.right,
height = canvas.height - margin.top - margin.bottom;
var x = d3.scaleLinear()
.range([0, width]);
var y = d3.scaleLinear()
.range([height, 0]);
var line = d3.line()
.x(function(d) { return x(d.x); })
.y(function(d) { return y(d.y); })
.context(context);
context.translate(margin.left, margin.top);
d3.requestJson("dato.json", function(d) {
d.x = +d.x;
d.y = +d.y;
return d;
}, function(error, data) {
if (error) throw error;
x.domain(d3.extent(data, function(d) { return d.x; }));
y.domain(d3.extent(data, function(d) { return d.y; }));
context.beginPath();
line(data);
context.lineWidth = 1.5;
context.strokeStyle = "steelblue";
context.stroke();
});
</script>
{
"chart": {
"y": [57, 92, 30, 91, 56, 20],
"x": [1,2,3,4,5,6]
}}
ここでは完全なコードTSVファイル:
x \t y
1 \t 93.24
2 \t 95.35
3 \t 98.84
4 \t 99.92
5 \t 99.80
6 \t 99.47
7 \t 100.39
8 \t 100.40
9 \t 100.81
jsonデータにはルートに 'x'プロパティがないため、' d.x = + d.x'は失敗します –
Jaromandaありがとうございました。 d3で2つの配列を持つオブジェクトにどのようにアクセスできますか? –
@Omar、私はd3.jsonがアクセサーを受け入れないことを確信しているにもかかわらず、私はd3.requestJsonについてはわからないが、私は検索するので私の答えを削除した。一方、私は答えを元に戻した。 –