質問編集履歴

21

weight画像追加

2017/12/04 06:21

投稿

maigoneko
maigoneko

スコア13

test CHANGED
File without changes
test CHANGED
@@ -470,12 +470,6 @@
470
470
 
471
471
  })
472
472
 
473
-
474
-
475
-
476
-
477
-
478
-
479
-
480
-
481
- ```
473
+ ```プロパティweight
474
+
475
+ ![イメージ説明](1524736b1206c643a9bc1315344cfa84.png)

20

手直し

2017/12/04 06:21

投稿

maigoneko
maigoneko

スコア13

test CHANGED
File without changes
test CHANGED
@@ -300,9 +300,137 @@
300
300
 
301
301
  var links = new Array();
302
302
 
303
+ //以下描画処理
304
+
305
+ function drawForce() {
306
+
307
+ var width = 1200;
308
+
309
+ var height = 600;
310
+
311
+ console.log(nodes);
312
+
313
+ console.log(links);
314
+
315
+
316
+
317
+ var force = d3.layout.force()
318
+
319
+ .nodes(nodes)
320
+
321
+ .links(links)
322
+
323
+ .size([width, height])
324
+
325
+ .distance(380)
326
+
327
+ .friction(0.9)
328
+
329
+ .charge(-800)
330
+
331
+ .gravity(0.1)
332
+
333
+ .start();
334
+
335
+
336
+
337
+ // svg領域の作成
338
+
339
+ var svg = d3.select("body")
340
+
341
+ .append("svg")
342
+
343
+ .attr({width:width, height:height});
344
+
345
+
346
+
347
+ // link線の描画(svgのline描画機能を利用)
348
+
349
+ var link = svg.selectAll("line")
350
+
351
+ .data(links)
352
+
353
+ .enter()
354
+
355
+ .append("line")
356
+
357
+ .style({stroke: "#ccc",
358
+
359
+ "stroke-width": 1
360
+
361
+ });
362
+
363
+
364
+
365
+ var g = svg.selectAll("g")
366
+
367
+ .data(nodes)
368
+
369
+ .enter()
370
+
371
+ .append("g")
372
+
373
+ .call(force.drag);
374
+
375
+
376
+
377
+ var a = g.append("a")
378
+
379
+ .attr({"xlink:href":function(data){ return data.url }, });
380
+
381
+
382
+
383
+ var node = a.append("image")
384
+
385
+ .attr({"xlink:href":function(data){ return data.pic },
386
+
387
+ "width":80,
388
+
389
+ "height":80
390
+
391
+ });
392
+
393
+
394
+
395
+
396
+
397
+
398
+
399
+ var label = a.append("text")
400
+
401
+ .attr({"text-anchor":"middle",
402
+
403
+ "fill":"black"})
404
+
405
+ .style({"font-size":14})
406
+
407
+ .text(function(data) { return data.label; });
408
+
409
+
410
+
411
+
412
+
413
+
414
+
415
+ force.on("tick", function() {
416
+
417
+ link.attr({x1: function(d) { return d.source.x; },
418
+
419
+ y1: function(d) { return d.source.y; },
420
+
421
+ x2: function(d) { return d.target.x; },
422
+
423
+ y2: function(d) { return d.target.y; }});
424
+
425
+ g.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
426
+
427
+ });
428
+
429
+ }
430
+
303
431
  $.ajax({
304
432
 
305
- url: 'http://202.26.158.109/~yiwai/json_out/json4.php',
433
+ url: 'json4.php',
306
434
 
307
435
  type: "GET",
308
436
 
@@ -314,7 +442,7 @@
314
442
 
315
443
  console.log("ajax通信に成功しました");
316
444
 
317
-
445
+ console.log(data);
318
446
 
319
447
  nodes = data["nodes"];
320
448
 
@@ -324,6 +452,8 @@
324
452
 
325
453
 
326
454
 
455
+ drawForce();
456
+
327
457
  //以下ajaxエラー時
328
458
 
329
459
 
@@ -342,135 +472,9 @@
342
472
 
343
473
 
344
474
 
345
- //以下描画処理 ここのこと言ってます
475
+
346
-
347
- function drawForce() {
476
+
348
-
349
- var width = 1200;
477
+
350
-
351
- var height = 600;
352
-
353
- console.log(nodes);
354
-
355
- console.log(links);
356
-
357
-
358
-
359
- var force = d3.layout.force()
360
-
361
- .nodes(nodes)
362
-
363
- .links(links)
364
-
365
- .size([width, height])
366
-
367
- .distance(380)
368
-
369
- .friction(0.9)
370
-
371
- .charge(-800)
372
-
373
- .gravity(0.1)
374
-
375
- .start();
376
-
377
-
378
-
379
- // svg領域の作成
380
-
381
- var svg = d3.select("body")
382
-
383
- .append("svg")
384
-
385
- .attr({width:width, height:height});
386
-
387
-
388
-
389
- // link線の描画(svgのline描画機能を利用)
390
-
391
- var link = svg.selectAll("line")
392
-
393
- .data(links)
394
-
395
- .enter()
396
-
397
- .append("line")
398
-
399
- .style({stroke: "#ccc",
400
-
401
- "stroke-width": 1
402
-
403
- });
404
-
405
-
406
-
407
- var g = svg.selectAll("g")
408
-
409
- .data(nodes)
410
-
411
- .enter()
412
-
413
- .append("g")
414
-
415
- .call(force.drag);
416
-
417
-
418
-
419
- var a = g.append("a")
420
-
421
- .attr({"xlink:href":function(data){ return data.url }, });
422
-
423
-
424
-
425
- var node = a.append("image")
426
-
427
- .attr({"xlink:href":function(data){ return data.pic },
428
-
429
- "width":80,
430
-
431
- "height":80
432
-
433
- });
434
-
435
-
436
-
437
-
438
-
439
-
440
-
441
- var label = a.append("text")
442
-
443
- .attr({"text-anchor":"middle",
444
-
445
- "fill":"black"})
446
-
447
- .style({"font-size":14})
448
-
449
- .text(function(data) { return data.label; });
450
-
451
-
452
-
453
-
454
-
455
-
456
-
457
- force.on("tick", function() {
458
-
459
- link.attr({x1: function(d) { return d.source.x; },
460
-
461
- y1: function(d) { return d.source.y; },
462
-
463
- x2: function(d) { return d.target.x; },
464
-
465
- y2: function(d) { return d.target.y; }});
466
-
467
- g.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
468
-
469
- });
470
-
471
- }
472
-
473
- drawForce();
474
478
 
475
479
 
476
480
 

19

返信用

2017/12/04 06:19

投稿

maigoneko
maigoneko

スコア13

test CHANGED
File without changes
test CHANGED
@@ -291,3 +291,187 @@
291
291
  getjson.29行めはvar force = d3.layout.force()の.startの行です
292
292
 
293
293
  78行目はdrawForce();の部分です
294
+
295
+ ###返信用
296
+
297
+ ```JavaScript
298
+
299
+ var nodes = new Array();
300
+
301
+ var links = new Array();
302
+
303
+ $.ajax({
304
+
305
+ url: 'http://202.26.158.109/~yiwai/json_out/json4.php',
306
+
307
+ type: "GET",
308
+
309
+ dataType: 'json',
310
+
311
+ scriptCharset:'utf-8',
312
+
313
+ }).done(function(data){
314
+
315
+ console.log("ajax通信に成功しました");
316
+
317
+
318
+
319
+ nodes = data["nodes"];
320
+
321
+ links = data["links"];
322
+
323
+
324
+
325
+
326
+
327
+ //以下ajaxエラー時
328
+
329
+
330
+
331
+ }).fail(function(XMLHttpRequest, textStatus, errorThrown){
332
+
333
+ console.log("ajax通信に失敗しました");
334
+
335
+ console.log("XMLHttpRequest : " + XMLHttpRequest.status);
336
+
337
+ console.log("textStatus : " + textStatus);
338
+
339
+ console.log("errorThrown : " + errorThrown.message);
340
+
341
+ })
342
+
343
+
344
+
345
+ //以下描画処理 ここのこと言ってます
346
+
347
+ function drawForce() {
348
+
349
+ var width = 1200;
350
+
351
+ var height = 600;
352
+
353
+ console.log(nodes);
354
+
355
+ console.log(links);
356
+
357
+
358
+
359
+ var force = d3.layout.force()
360
+
361
+ .nodes(nodes)
362
+
363
+ .links(links)
364
+
365
+ .size([width, height])
366
+
367
+ .distance(380)
368
+
369
+ .friction(0.9)
370
+
371
+ .charge(-800)
372
+
373
+ .gravity(0.1)
374
+
375
+ .start();
376
+
377
+
378
+
379
+ // svg領域の作成
380
+
381
+ var svg = d3.select("body")
382
+
383
+ .append("svg")
384
+
385
+ .attr({width:width, height:height});
386
+
387
+
388
+
389
+ // link線の描画(svgのline描画機能を利用)
390
+
391
+ var link = svg.selectAll("line")
392
+
393
+ .data(links)
394
+
395
+ .enter()
396
+
397
+ .append("line")
398
+
399
+ .style({stroke: "#ccc",
400
+
401
+ "stroke-width": 1
402
+
403
+ });
404
+
405
+
406
+
407
+ var g = svg.selectAll("g")
408
+
409
+ .data(nodes)
410
+
411
+ .enter()
412
+
413
+ .append("g")
414
+
415
+ .call(force.drag);
416
+
417
+
418
+
419
+ var a = g.append("a")
420
+
421
+ .attr({"xlink:href":function(data){ return data.url }, });
422
+
423
+
424
+
425
+ var node = a.append("image")
426
+
427
+ .attr({"xlink:href":function(data){ return data.pic },
428
+
429
+ "width":80,
430
+
431
+ "height":80
432
+
433
+ });
434
+
435
+
436
+
437
+
438
+
439
+
440
+
441
+ var label = a.append("text")
442
+
443
+ .attr({"text-anchor":"middle",
444
+
445
+ "fill":"black"})
446
+
447
+ .style({"font-size":14})
448
+
449
+ .text(function(data) { return data.label; });
450
+
451
+
452
+
453
+
454
+
455
+
456
+
457
+ force.on("tick", function() {
458
+
459
+ link.attr({x1: function(d) { return d.source.x; },
460
+
461
+ y1: function(d) { return d.source.y; },
462
+
463
+ x2: function(d) { return d.target.x; },
464
+
465
+ y2: function(d) { return d.target.y; }});
466
+
467
+ g.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
468
+
469
+ });
470
+
471
+ }
472
+
473
+ drawForce();
474
+
475
+
476
+
477
+ ```

18

追記にCannot read property 'weight' of undefined詳細

2017/12/04 05:45

投稿

maigoneko
maigoneko

スコア13

test CHANGED
File without changes
test CHANGED
@@ -281,3 +281,13 @@
281
281
  ###console.log
282
282
 
283
283
  ![イメージ説明](87c20b95d669c9813f1e263ff3daa6e7.jpeg)
284
+
285
+
286
+
287
+ ###追記 Cannot read property 'weight' of undefined
288
+
289
+ ![イメージ説明](2163a4eedc8cc0f077fa886d449e4469.png)
290
+
291
+ getjson.29行めはvar force = d3.layout.force()の.startの行です
292
+
293
+ 78行目はdrawForce();の部分です

17

ミス

2017/12/04 05:11

投稿

maigoneko
maigoneko

スコア13

test CHANGED
File without changes
test CHANGED
@@ -281,289 +281,3 @@
281
281
  ###console.log
282
282
 
283
283
  ![イメージ説明](87c20b95d669c9813f1e263ff3daa6e7.jpeg)
284
-
285
-
286
-
287
- ###前提・実現したいこと
288
-
289
- 以下のjavascriptを用いて、d3.jsでのforceレイアウトの描画をしたいと考えています。
290
-
291
-
292
-
293
- ###発生している問題・エラーメッセージ
294
-
295
-
296
-
297
- 現状だとnodes[0] = links["source"]になってしまっています。
298
-
299
- 最終的にはnodesのidをもとに、souceとtargetの関係を描画したいと考えています
300
-
301
- (例)
302
-
303
- nodes id:1 ユーザー:test1
304
-
305
- nodes id:2 ユーザー:test2
306
-
307
- source:1= nodes:id1
308
-
309
- target:2=nodes:id2 (test1 → test2の関係)
310
-
311
-
312
-
313
- このようにするためには、どうのように改良すればsourceの値を正しく参照できるのでしょうか?
314
-
315
-
316
-
317
- また以下のようなエラーも、ブラウザコンソール上で発生しています
318
-
319
- ```ここに言語を入力
320
-
321
- Cannot read property 'weight' of undefined
322
-
323
- ```
324
-
325
-
326
-
327
- ```javascript
328
-
329
- var nodes = new Array();
330
-
331
- var links = new Array();
332
-
333
- $.ajax({
334
-
335
- url: 'json4.php',
336
-
337
- type: "GET",
338
-
339
- dataType: 'json',
340
-
341
- scriptCharset: 'utf-8',
342
-
343
- }).done(function(data) {
344
-
345
- console.log("ajax通信に成功しました");
346
-
347
-
348
-
349
- nodes = data["nodes"];
350
-
351
- links = data["links"];
352
-
353
-
354
-
355
- //以下描画処理
356
-
357
- function drawForce() {
358
-
359
- var width = 1200;
360
-
361
- var height = 600;
362
-
363
- console.log(nodes);
364
-
365
- console.log(links);
366
-
367
-
368
-
369
- var force = d3.layout.force()
370
-
371
- .nodes(nodes)
372
-
373
- .links(links)
374
-
375
- .size([width, height])
376
-
377
- .distance(380)
378
-
379
- .friction(0.9)
380
-
381
- .charge(-800)
382
-
383
- .gravity(0.1)
384
-
385
- .start();
386
-
387
-
388
-
389
- // svg領域の作成
390
-
391
- var svg = d3.select("body")
392
-
393
- .append("svg")
394
-
395
- .attr({
396
-
397
- width: width,
398
-
399
- height: height
400
-
401
- });
402
-
403
-
404
-
405
- // link線の描画(svgのline描画機能を利用)
406
-
407
- var link = svg.selectAll("line")
408
-
409
- .data(links)
410
-
411
- .enter()
412
-
413
- .append("line")
414
-
415
- .style({
416
-
417
- stroke: "#ccc",
418
-
419
- "stroke-width": 1
420
-
421
- });
422
-
423
-
424
-
425
- var g = svg.selectAll("g")
426
-
427
- .data(nodes)
428
-
429
- .enter()
430
-
431
- .append("g")
432
-
433
- .call(force.drag);
434
-
435
-
436
-
437
- var a = g.append("a")
438
-
439
- .attr({
440
-
441
- "xlink:href": function(data) {
442
-
443
- return data.url
444
-
445
- },
446
-
447
- });
448
-
449
-
450
-
451
- var node = a.append("image")
452
-
453
- .attr({
454
-
455
- "xlink:href": function(data) {
456
-
457
- return data.pic
458
-
459
- },
460
-
461
- "width": 80,
462
-
463
- "height": 80
464
-
465
- });
466
-
467
-
468
-
469
-
470
-
471
- var label = a.append("text")
472
-
473
- .attr({
474
-
475
- "text-anchor": "middle",
476
-
477
- "fill": "black"
478
-
479
- })
480
-
481
- .style({
482
-
483
- "font-size": 14
484
-
485
- })
486
-
487
- .text(function(data) {
488
-
489
- return data.label;
490
-
491
- });
492
-
493
-
494
-
495
-
496
-
497
- force.on("tick", function() {
498
-
499
- link.attr({
500
-
501
- x1: function(d) {
502
-
503
- return d.source.x;
504
-
505
- },
506
-
507
- y1: function(d) {
508
-
509
- return d.source.y;
510
-
511
- },
512
-
513
- x2: function(d) {
514
-
515
- return d.target.x;
516
-
517
- },
518
-
519
- y2: function(d) {
520
-
521
- return d.target.y;
522
-
523
- }
524
-
525
- });
526
-
527
- g.attr("transform", function(d) {
528
-
529
- return "translate(" + d.x + "," + d.y + ")";
530
-
531
- });
532
-
533
- });
534
-
535
- }
536
-
537
- drawForce();
538
-
539
- //以下ajaxエラー時
540
-
541
-
542
-
543
- }).fail(function(XMLHttpRequest, textStatus, errorThrown) {
544
-
545
- console.log("ajax通信に失敗しました");
546
-
547
- console.log("XMLHttpRequest : " + XMLHttpRequest.status);
548
-
549
- console.log("textStatus : " + textStatus);
550
-
551
- console.log("errorThrown : " + errorThrown.message);
552
-
553
- })
554
-
555
-
556
-
557
-
558
-
559
-
560
-
561
- ```
562
-
563
-
564
-
565
-
566
-
567
- ###console.log
568
-
569
- ![イメージ説明](87c20b95d669c9813f1e263ff3daa6e7.jpeg)

16

エラーの明確化による大幅変更

2017/12/03 19:54

投稿

maigoneko
maigoneko

スコア13

test CHANGED
@@ -1 +1 @@
1
- しい参照 データの描画[アドバイス求む]
1
+ idとsource,targetが一致
test CHANGED
@@ -1,37 +1,41 @@
1
1
  ###前提・実現したいこと
2
2
 
3
- phpからdbデータを受け取りjson出力した後、d3.jsのforce-layoutで表示てみたいと思っています。
3
+ 以下のjavascriptを用いて、d3.jsのforceレイアウトの描画をしたいと考えています。
4
-
5
- こちらのコードを一部参考にしました (http://rplay.me/3741)
4
+
5
+
6
6
 
7
7
  ###発生している問題・エラーメッセージ
8
8
 
9
9
 
10
10
 
11
- 今回javascriptでjson4.phpからデータを受け取り、nodesとlinksにそれぞれ入れました。
12
-
13
- しかしグラフが表示されません。
14
-
15
- そこでなのですが以下のような一部コード
16
-
17
- return data.urlでは正く値を引けていないのではないかと12/3に思いした
11
+ 現状だとnodes[0] = links["source"]になってまっていま
12
+
18
-
13
+ 最終的にはnodesのidをもとに、souceとtargetの関係を描画したいと考えています
14
+
19
-
15
+ (例)
16
+
17
+ nodes id:1 ユーザー:test1
18
+
19
+ nodes id:2 ユーザー:test2
20
+
21
+ source:1= nodes:id1
22
+
23
+ target:2=nodes:id2 (test1 → test2の関係)
24
+
25
+
26
+
27
+ このようにするためには、どうのように改良すればsourceの値を正しく参照できるのでしょうか?
28
+
29
+
30
+
31
+ また以下のようなエラーも、ブラウザコンソール上で発生しています
20
32
 
21
33
  ```ここに言語を入力
22
34
 
23
- var a = g.append("a")
24
-
25
- .attr({"xlink:href":function(data){ return data.url }, });
35
+ Cannot read property 'weight' of undefined
26
36
 
27
37
  ```
28
38
 
29
- 今回の場合、nodesとlinksにそれぞれ入れていますが、どのような参照の仕方をすればいいのでしょうか
30
-
31
- ###追記
32
-
33
-
34
-
35
39
 
36
40
 
37
41
  ```javascript
@@ -42,157 +46,215 @@
42
46
 
43
47
  $.ajax({
44
48
 
45
- url: 'json4.php',
46
-
47
- type: "GET",
48
-
49
- dataType: 'json',
50
-
51
- scriptCharset:'utf-8',
52
-
53
- }).done(function(data){
54
-
55
- console.log("ajax通信に成功しました");//ここからnodesとlinksに入れていく
56
-
57
- nodes = data["nodes"];
58
-
59
- links = data["links"];
60
-
61
- console.log(nodes);
62
-
63
- console.log(links);
64
-
65
- //以下描画処理
66
-
67
- function drawForce() {
68
-
69
- var width = 1200;
70
-
71
- var height = 600;
72
-
73
-
74
-
75
-
76
-
77
- var force = d3.layout.force()
78
-
79
- .nodes(nodes)
80
-
81
- .links(links)
82
-
83
- .size([width, height])
84
-
85
- .distance(380)
86
-
87
- .friction(0.9)
88
-
89
- .charge(-800)
90
-
91
- .gravity(0.1)
92
-
93
- .start();
94
-
95
-
96
-
97
- // svg領域の作成
98
-
99
- var svg = d3.select(id)
100
-
101
- .append("svg")
102
-
103
- .attr({width:width, height:height});
104
-
105
-
106
-
107
- // link線の描画(svgのline描画機能を利用)
108
-
109
- var link = svg.selectAll("line")
110
-
111
- .data(links)
112
-
113
- .enter()
114
-
115
- .append("line")
116
-
117
- .style({stroke: "#ccc",
118
-
119
- "stroke-width": 1
120
-
121
- });
122
-
123
-
124
-
125
- var g = svg.selectAll("g")
126
-
127
- .data(nodes)
128
-
129
- .enter()
130
-
131
- .append("g")
132
-
133
- .call(force.drag);
134
-
135
-
136
-
137
- var a = g.append("a")
138
-
139
- .attr({"xlink:href":function(data){ return data.url }, });
140
-
141
-
142
-
143
- var node = a.append("image")
144
-
145
- .attr({"xlink:href":function(data){ return data.pic },
146
-
147
- "width":80,
148
-
149
- "height":80
150
-
151
- });
152
-
153
-
154
-
155
-
156
-
157
-
158
-
159
- var label = a.append("text")
160
-
161
- .attr({"text-anchor":"middle",
162
-
163
- "fill":"black"})
164
-
165
- .style({"font-size":14})
166
-
167
- .text(function(data) { return data.label; });
168
-
169
-
170
-
171
-
172
-
173
-
174
-
175
- force.on("tick", function() {
176
-
177
- link.attr({x1: function(d) { return d.source.x; },
178
-
179
- y1: function(d) { return d.source.y; },
180
-
181
- x2: function(d) { return d.target.x; },
182
-
183
- y2: function(d) { return d.target.y; }});
184
-
185
- g.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
186
-
187
- });
188
-
189
-
190
-
191
- drawForce("#force", data);
192
-
193
- //以下ajaxエラー時
194
-
195
- }}).fail(function(XMLHttpRequest, textStatus, errorThrown){
49
+ url: 'json4.php',
50
+
51
+ type: "GET",
52
+
53
+ dataType: 'json',
54
+
55
+ scriptCharset: 'utf-8',
56
+
57
+ }).done(function(data) {
58
+
59
+ console.log("ajax通信に成功しました");
60
+
61
+
62
+
63
+ nodes = data["nodes"];
64
+
65
+ links = data["links"];
66
+
67
+
68
+
69
+ //以下描画処理
70
+
71
+ function drawForce() {
72
+
73
+ var width = 1200;
74
+
75
+ var height = 600;
76
+
77
+ console.log(nodes);
78
+
79
+ console.log(links);
80
+
81
+
82
+
83
+ var force = d3.layout.force()
84
+
85
+ .nodes(nodes)
86
+
87
+ .links(links)
88
+
89
+ .size([width, height])
90
+
91
+ .distance(380)
92
+
93
+ .friction(0.9)
94
+
95
+ .charge(-800)
96
+
97
+ .gravity(0.1)
98
+
99
+ .start();
100
+
101
+
102
+
103
+ // svg領域の作成
104
+
105
+ var svg = d3.select("body")
106
+
107
+ .append("svg")
108
+
109
+ .attr({
110
+
111
+ width: width,
112
+
113
+ height: height
114
+
115
+ });
116
+
117
+
118
+
119
+ // link線の描画(svgのline描画機能を利用)
120
+
121
+ var link = svg.selectAll("line")
122
+
123
+ .data(links)
124
+
125
+ .enter()
126
+
127
+ .append("line")
128
+
129
+ .style({
130
+
131
+ stroke: "#ccc",
132
+
133
+ "stroke-width": 1
134
+
135
+ });
136
+
137
+
138
+
139
+ var g = svg.selectAll("g")
140
+
141
+ .data(nodes)
142
+
143
+ .enter()
144
+
145
+ .append("g")
146
+
147
+ .call(force.drag);
148
+
149
+
150
+
151
+ var a = g.append("a")
152
+
153
+ .attr({
154
+
155
+ "xlink:href": function(data) {
156
+
157
+ return data.url
158
+
159
+ },
160
+
161
+ });
162
+
163
+
164
+
165
+ var node = a.append("image")
166
+
167
+ .attr({
168
+
169
+ "xlink:href": function(data) {
170
+
171
+ return data.pic
172
+
173
+ },
174
+
175
+ "width": 80,
176
+
177
+ "height": 80
178
+
179
+ });
180
+
181
+
182
+
183
+
184
+
185
+ var label = a.append("text")
186
+
187
+ .attr({
188
+
189
+ "text-anchor": "middle",
190
+
191
+ "fill": "black"
192
+
193
+ })
194
+
195
+ .style({
196
+
197
+ "font-size": 14
198
+
199
+ })
200
+
201
+ .text(function(data) {
202
+
203
+ return data.label;
204
+
205
+ });
206
+
207
+
208
+
209
+
210
+
211
+ force.on("tick", function() {
212
+
213
+ link.attr({
214
+
215
+ x1: function(d) {
216
+
217
+ return d.source.x;
218
+
219
+ },
220
+
221
+ y1: function(d) {
222
+
223
+ return d.source.y;
224
+
225
+ },
226
+
227
+ x2: function(d) {
228
+
229
+ return d.target.x;
230
+
231
+ },
232
+
233
+ y2: function(d) {
234
+
235
+ return d.target.y;
236
+
237
+ }
238
+
239
+ });
240
+
241
+ g.attr("transform", function(d) {
242
+
243
+ return "translate(" + d.x + "," + d.y + ")";
244
+
245
+ });
246
+
247
+ });
248
+
249
+ }
250
+
251
+ drawForce();
252
+
253
+ //以下ajaxエラー時
254
+
255
+
256
+
257
+ }).fail(function(XMLHttpRequest, textStatus, errorThrown) {
196
258
 
197
259
  console.log("ajax通信に失敗しました");
198
260
 
@@ -218,136 +280,290 @@
218
280
 
219
281
  ###console.log
220
282
 
221
- ![イメージ説明](8d9a30d4d8d3ed084326366f3f632fd2.jpeg)
283
+ ![イメージ説明](87c20b95d669c9813f1e263ff3daa6e7.jpeg)
284
+
285
+
286
+
222
-
287
+ ###前提・実現したいこと
288
+
289
+ 以下のjavascriptを用いて、d3.jsでのforceレイアウトの描画をしたいと考えています。
290
+
291
+
292
+
223
- ###phpのTeraTerm実行結果
293
+ ###発生している問題・エラーメッセージ
294
+
295
+
296
+
297
+ 現状だとnodes[0] = links["source"]になってしまっています。
298
+
299
+ 最終的にはnodesのidをもとに、souceとtargetの関係を描画したいと考えています
300
+
301
+ (例)
302
+
303
+ nodes id:1 ユーザー:test1
304
+
305
+ nodes id:2 ユーザー:test2
306
+
307
+ source:1= nodes:id1
308
+
309
+ target:2=nodes:id2 (test1 → test2の関係)
310
+
311
+
312
+
313
+ このようにするためには、どうのように改良すればsourceの値を正しく参照できるのでしょうか?
314
+
315
+
316
+
317
+ また以下のようなエラーも、ブラウザコンソール上で発生しています
224
318
 
225
319
  ```ここに言語を入力
226
320
 
227
- {
228
-
229
- "nodes": [
230
-
231
- {
232
-
233
- "id": 1,
234
-
235
- "label": "testuser",
321
+ Cannot read property 'weight' of undefined
236
-
237
- "pic": ""
238
-
239
- },
240
-
241
- {
242
-
243
- "id": 2,
244
-
245
- "label": "test",
246
-
247
- "pic": ""
248
-
249
- },
250
-
251
- {
252
-
253
- "id": 11,
254
-
255
- "label": "test300",
256
-
257
- "pic": ""
258
-
259
- },
260
-
261
- {
262
-
263
- "id": 12,
264
-
265
- "label": "test400",
266
-
267
- "pic": ""
268
-
269
- },
270
-
271
- {
272
-
273
- "id": 13,
274
-
275
- "label": "test1106",
276
-
277
- "pic": ""
278
-
279
- }
280
-
281
- ],
282
-
283
- "links": [
284
-
285
- {
286
-
287
- "source": 1,
288
-
289
- "target": 2
290
-
291
- },
292
-
293
- {
294
-
295
- "source": 2,
296
-
297
- "target": 1
298
-
299
- },
300
-
301
- {
302
-
303
- "source": 12,
304
-
305
- "target": 11
306
-
307
- },
308
-
309
- {
310
-
311
- "source": 11,
312
-
313
- "target": 12
314
-
315
- },
316
-
317
- {
318
-
319
- "source": 11,
320
-
321
- "target": 13
322
-
323
- },
324
-
325
- {
326
-
327
- "source": 13,
328
-
329
- "target": 11
330
-
331
- },
332
-
333
- {
334
-
335
- "source": 11,
336
-
337
- "target": 12
338
-
339
- },
340
-
341
- {
342
-
343
- "source": 13,
344
-
345
- "target": 12
346
-
347
- }
348
-
349
- ]
350
-
351
- }
352
322
 
353
323
  ```
324
+
325
+
326
+
327
+ ```javascript
328
+
329
+ var nodes = new Array();
330
+
331
+ var links = new Array();
332
+
333
+ $.ajax({
334
+
335
+ url: 'json4.php',
336
+
337
+ type: "GET",
338
+
339
+ dataType: 'json',
340
+
341
+ scriptCharset: 'utf-8',
342
+
343
+ }).done(function(data) {
344
+
345
+ console.log("ajax通信に成功しました");
346
+
347
+
348
+
349
+ nodes = data["nodes"];
350
+
351
+ links = data["links"];
352
+
353
+
354
+
355
+ //以下描画処理
356
+
357
+ function drawForce() {
358
+
359
+ var width = 1200;
360
+
361
+ var height = 600;
362
+
363
+ console.log(nodes);
364
+
365
+ console.log(links);
366
+
367
+
368
+
369
+ var force = d3.layout.force()
370
+
371
+ .nodes(nodes)
372
+
373
+ .links(links)
374
+
375
+ .size([width, height])
376
+
377
+ .distance(380)
378
+
379
+ .friction(0.9)
380
+
381
+ .charge(-800)
382
+
383
+ .gravity(0.1)
384
+
385
+ .start();
386
+
387
+
388
+
389
+ // svg領域の作成
390
+
391
+ var svg = d3.select("body")
392
+
393
+ .append("svg")
394
+
395
+ .attr({
396
+
397
+ width: width,
398
+
399
+ height: height
400
+
401
+ });
402
+
403
+
404
+
405
+ // link線の描画(svgのline描画機能を利用)
406
+
407
+ var link = svg.selectAll("line")
408
+
409
+ .data(links)
410
+
411
+ .enter()
412
+
413
+ .append("line")
414
+
415
+ .style({
416
+
417
+ stroke: "#ccc",
418
+
419
+ "stroke-width": 1
420
+
421
+ });
422
+
423
+
424
+
425
+ var g = svg.selectAll("g")
426
+
427
+ .data(nodes)
428
+
429
+ .enter()
430
+
431
+ .append("g")
432
+
433
+ .call(force.drag);
434
+
435
+
436
+
437
+ var a = g.append("a")
438
+
439
+ .attr({
440
+
441
+ "xlink:href": function(data) {
442
+
443
+ return data.url
444
+
445
+ },
446
+
447
+ });
448
+
449
+
450
+
451
+ var node = a.append("image")
452
+
453
+ .attr({
454
+
455
+ "xlink:href": function(data) {
456
+
457
+ return data.pic
458
+
459
+ },
460
+
461
+ "width": 80,
462
+
463
+ "height": 80
464
+
465
+ });
466
+
467
+
468
+
469
+
470
+
471
+ var label = a.append("text")
472
+
473
+ .attr({
474
+
475
+ "text-anchor": "middle",
476
+
477
+ "fill": "black"
478
+
479
+ })
480
+
481
+ .style({
482
+
483
+ "font-size": 14
484
+
485
+ })
486
+
487
+ .text(function(data) {
488
+
489
+ return data.label;
490
+
491
+ });
492
+
493
+
494
+
495
+
496
+
497
+ force.on("tick", function() {
498
+
499
+ link.attr({
500
+
501
+ x1: function(d) {
502
+
503
+ return d.source.x;
504
+
505
+ },
506
+
507
+ y1: function(d) {
508
+
509
+ return d.source.y;
510
+
511
+ },
512
+
513
+ x2: function(d) {
514
+
515
+ return d.target.x;
516
+
517
+ },
518
+
519
+ y2: function(d) {
520
+
521
+ return d.target.y;
522
+
523
+ }
524
+
525
+ });
526
+
527
+ g.attr("transform", function(d) {
528
+
529
+ return "translate(" + d.x + "," + d.y + ")";
530
+
531
+ });
532
+
533
+ });
534
+
535
+ }
536
+
537
+ drawForce();
538
+
539
+ //以下ajaxエラー時
540
+
541
+
542
+
543
+ }).fail(function(XMLHttpRequest, textStatus, errorThrown) {
544
+
545
+ console.log("ajax通信に失敗しました");
546
+
547
+ console.log("XMLHttpRequest : " + XMLHttpRequest.status);
548
+
549
+ console.log("textStatus : " + textStatus);
550
+
551
+ console.log("errorThrown : " + errorThrown.message);
552
+
553
+ })
554
+
555
+
556
+
557
+
558
+
559
+
560
+
561
+ ```
562
+
563
+
564
+
565
+
566
+
567
+ ###console.log
568
+
569
+ ![イメージ説明](87c20b95d669c9813f1e263ff3daa6e7.jpeg)

15

原因特定?

2017/12/03 19:53

投稿

maigoneko
maigoneko

スコア13

test CHANGED
@@ -1 +1 @@
1
- phpからjson形式で出力データの描画[アドバイス求む]
1
+ い参照 データの描画[アドバイス求む]
test CHANGED
@@ -1,9 +1,3 @@
1
- ###12/3更新
2
-
3
- 自身では手詰まり感がでてしまっているので、解決まで行かないにしても、助言だけでもいただきたいです。(こう考えてみようなど、問題を明確にするうえでのアドバイスなども求めてます)
4
-
5
-
6
-
7
1
  ###前提・実現したいこと
8
2
 
9
3
  phpからdbのデータを受け取りjson出力した後、d3.jsのforce-layoutで表示してみたいと思っています。
@@ -16,11 +10,23 @@
16
10
 
17
11
  今回javascriptでjson4.phpからデータを受け取り、nodesとlinksにそれぞれ入れました。
18
12
 
19
- しかしグラフが表示されません。console.logを見る限りでは入っている気がします。
13
+ しかしグラフが表示されません。
20
-
14
+
21
- 何が原因なのわからず困っています
15
+ そこでなのです以下のような一部コード
22
-
16
+
23
- 問題明確にするためアドバイスどもあれば、ただきたいと思っていま
17
+ return data.urlでは正しく値引けていないではない12/3に思いました
18
+
19
+
20
+
21
+ ```ここに言語を入力
22
+
23
+ var a = g.append("a")
24
+
25
+ .attr({"xlink:href":function(data){ return data.url }, });
26
+
27
+ ```
28
+
29
+ 今回の場合、nodesとlinksにそれぞれ入れていますが、どのような参照の仕方をすればいいのでしょうか
24
30
 
25
31
  ###追記
26
32
 
@@ -58,7 +64,7 @@
58
64
 
59
65
  //以下描画処理
60
66
 
61
- function drawForce(id, dataset) {
67
+ function drawForce() {
62
68
 
63
69
  var width = 1200;
64
70
 

14

タグ追加

2017/12/03 10:26

投稿

maigoneko
maigoneko

スコア13

test CHANGED
File without changes
test CHANGED
File without changes

13

大幅に内容変更

2017/12/03 09:11

投稿

maigoneko
maigoneko

スコア13

test CHANGED
@@ -1 +1 @@
1
- D3.jsでForced Layout[助言だけでも求]
1
+ phpからjson形式出力したデータの描画[アドバイス]
test CHANGED
@@ -8,25 +8,25 @@
8
8
 
9
9
  phpからdbのデータを受け取りjson出力した後、d3.jsのforce-layoutで表示してみたいと思っています。
10
10
 
11
-
11
+ こちらのコードを一部参考にしました (http://rplay.me/3741)
12
12
 
13
13
  ###発生している問題・エラーメッセージ
14
14
 
15
15
 
16
16
 
17
- 今回javascriptでjson4.phpからデータを受け取り、nodesとlinksにそれぞれ入れました。しかし図が表示されません。console.logを見る限りでは入っている気がします。
17
+ 今回javascriptでjson4.phpからデータを受け取り、nodesとlinksにそれぞれ入れました。
18
+
18
-
19
+ しかしグラフが表示されません。console.logを見る限りでは入っている気がします。
20
+
19
- 何が原因なのかがわからず困っています(linksが問題?)
21
+ 何が原因なのかがわからず困っています
20
-
21
- nodes=data["nodes"];
22
+
22
-
23
- links=data["links"];
24
-
25
- 方で結局のころ、linksが正常に動くのかもイマイチわかりせん・・・
23
+ 問題を明確にするためアドバイスなどもあれば、いただたい思っていす。
26
-
27
-
28
-
24
+
29
- ###(getjson.js)のソースコード
25
+ ###追記
26
+
27
+
28
+
29
+
30
30
 
31
31
  ```javascript
32
32
 
@@ -46,19 +46,147 @@
46
46
 
47
47
  }).done(function(data){
48
48
 
49
- console.log("ajax通信に成功しました");
49
+ console.log("ajax通信に成功しました");//ここからnodesとlinksに入れていく
50
-
51
-
52
-
50
+
53
- nodes=data["nodes"];
51
+ nodes = data["nodes"];
54
-
52
+
55
- links=data["links"];
53
+ links = data["links"];
56
54
 
57
55
  console.log(nodes);
58
56
 
59
57
  console.log(links);
60
58
 
59
+ //以下描画処理
60
+
61
+ function drawForce(id, dataset) {
62
+
63
+ var width = 1200;
64
+
65
+ var height = 600;
66
+
67
+
68
+
69
+
70
+
71
+ var force = d3.layout.force()
72
+
73
+ .nodes(nodes)
74
+
75
+ .links(links)
76
+
77
+ .size([width, height])
78
+
79
+ .distance(380)
80
+
81
+ .friction(0.9)
82
+
83
+ .charge(-800)
84
+
85
+ .gravity(0.1)
86
+
87
+ .start();
88
+
89
+
90
+
91
+ // svg領域の作成
92
+
93
+ var svg = d3.select(id)
94
+
95
+ .append("svg")
96
+
97
+ .attr({width:width, height:height});
98
+
99
+
100
+
101
+ // link線の描画(svgのline描画機能を利用)
102
+
103
+ var link = svg.selectAll("line")
104
+
105
+ .data(links)
106
+
107
+ .enter()
108
+
109
+ .append("line")
110
+
111
+ .style({stroke: "#ccc",
112
+
113
+ "stroke-width": 1
114
+
115
+ });
116
+
117
+
118
+
119
+ var g = svg.selectAll("g")
120
+
121
+ .data(nodes)
122
+
123
+ .enter()
124
+
125
+ .append("g")
126
+
127
+ .call(force.drag);
128
+
129
+
130
+
131
+ var a = g.append("a")
132
+
133
+ .attr({"xlink:href":function(data){ return data.url }, });
134
+
135
+
136
+
137
+ var node = a.append("image")
138
+
139
+ .attr({"xlink:href":function(data){ return data.pic },
140
+
141
+ "width":80,
142
+
143
+ "height":80
144
+
145
+ });
146
+
147
+
148
+
149
+
150
+
151
+
152
+
153
+ var label = a.append("text")
154
+
155
+ .attr({"text-anchor":"middle",
156
+
157
+ "fill":"black"})
158
+
159
+ .style({"font-size":14})
160
+
161
+ .text(function(data) { return data.label; });
162
+
163
+
164
+
165
+
166
+
167
+
168
+
169
+ force.on("tick", function() {
170
+
171
+ link.attr({x1: function(d) { return d.source.x; },
172
+
173
+ y1: function(d) { return d.source.y; },
174
+
175
+ x2: function(d) { return d.target.x; },
176
+
177
+ y2: function(d) { return d.target.y; }});
178
+
179
+ g.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
180
+
181
+ });
182
+
183
+
184
+
185
+ drawForce("#force", data);
186
+
187
+ //以下ajaxエラー時
188
+
61
- }).fail(function(XMLHttpRequest, textStatus, errorThrown){
189
+ }}).fail(function(XMLHttpRequest, textStatus, errorThrown){
62
190
 
63
191
  console.log("ajax通信に失敗しました");
64
192
 
@@ -72,452 +200,148 @@
72
200
 
73
201
 
74
202
 
203
+
204
+
205
+
206
+
75
207
  ```
76
208
 
77
- ###(test.html)のソースコード
78
-
79
- ```html
80
-
81
- <script type="text/javascript" src="getjson.js">
82
-
83
- var width = 1200;
84
-
85
- var height = 600;
86
-
87
-
88
-
89
- var force = d3.layout.force() //後で微調整する10/30
90
-
91
- .nodes(nodes)
92
-
93
- .links(links)
94
-
95
- .size([width, height])
96
-
97
- .distance(380)
98
-
99
- .friction(0.9)
100
-
101
- .charge(-800)
102
-
103
- .gravity(0.1)
104
-
105
- .start();
106
-
107
-
108
-
109
- // svg領域の作成
110
-
111
- var svg = d3.select("body")
112
-
113
- .append("svg")
114
-
115
- .attr({width:width, height:height});
116
-
117
-
118
-
119
- // link線の描画
120
-
121
- var link = svg.selectAll("line")
122
-
123
- .data(links)
124
-
125
- .enter()
126
-
127
- .append("line")
128
-
129
- .style({stroke: "#ccc",
130
-
131
- "stroke-width": 1
132
-
133
- });
134
-
135
-
136
-
137
- var g = svg.selectAll("g")
138
-
139
- .data(nodes)
140
-
141
- .enter()
142
-
143
- .append("g")
144
-
145
- .call(force.drag);
146
-
147
-
148
-
149
- var a = g.append("a") //個人的にあとで必要
150
-
151
- .attr({"xlink:href":function(data){ return data.url }, });
152
-
153
-
154
-
155
- var node = a.append("image")
156
-
157
- .attr({"xlink:href":function(data){ return data.pic },
158
-
159
- "width":80,
160
-
161
- "height":80
162
-
163
- });
164
-
165
-
166
-
167
-
168
-
169
-
170
-
171
- var label = a.append("text")
172
-
173
- .attr({"text-anchor":"middle",
174
-
175
- "fill":"black"})
176
-
177
- .style({"font-size":14})
178
-
179
- .text(function(data) { return data.label; });
180
-
181
-
182
-
183
-
184
-
185
-
186
-
187
- force.on("tick", function() {
188
-
189
- link.attr({x1: function(d) { return d.source.x; },
190
-
191
- y1: function(d) { return d.source.y; },
192
-
193
- x2: function(d) { return d.target.x; },
194
-
195
- y2: function(d) { return d.target.y; }});
196
-
197
- g.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
198
-
199
- });
200
-
201
- </script>
202
-
203
-
209
+
210
+
211
+
212
+
213
+ ###console.log
214
+
215
+ ![イメージ説明](8d9a30d4d8d3ed084326366f3f632fd2.jpeg)
216
+
217
+ ###phpのTeraTerm実行結果
218
+
219
+ ```ここに言語を入力
220
+
221
+ {
222
+
223
+ "nodes": [
224
+
225
+ {
226
+
227
+ "id": 1,
228
+
229
+ "label": "testuser",
230
+
231
+ "pic": ""
232
+
233
+ },
234
+
235
+ {
236
+
237
+ "id": 2,
238
+
239
+ "label": "test",
240
+
241
+ "pic": ""
242
+
243
+ },
244
+
245
+ {
246
+
247
+ "id": 11,
248
+
249
+ "label": "test300",
250
+
251
+ "pic": ""
252
+
253
+ },
254
+
255
+ {
256
+
257
+ "id": 12,
258
+
259
+ "label": "test400",
260
+
261
+ "pic": ""
262
+
263
+ },
264
+
265
+ {
266
+
267
+ "id": 13,
268
+
269
+ "label": "test1106",
270
+
271
+ "pic": ""
272
+
273
+ }
274
+
275
+ ],
276
+
277
+ "links": [
278
+
279
+ {
280
+
281
+ "source": 1,
282
+
283
+ "target": 2
284
+
285
+ },
286
+
287
+ {
288
+
289
+ "source": 2,
290
+
291
+ "target": 1
292
+
293
+ },
294
+
295
+ {
296
+
297
+ "source": 12,
298
+
299
+ "target": 11
300
+
301
+ },
302
+
303
+ {
304
+
305
+ "source": 11,
306
+
307
+ "target": 12
308
+
309
+ },
310
+
311
+ {
312
+
313
+ "source": 11,
314
+
315
+ "target": 13
316
+
317
+ },
318
+
319
+ {
320
+
321
+ "source": 13,
322
+
323
+ "target": 11
324
+
325
+ },
326
+
327
+ {
328
+
329
+ "source": 11,
330
+
331
+ "target": 12
332
+
333
+ },
334
+
335
+ {
336
+
337
+ "source": 13,
338
+
339
+ "target": 12
340
+
341
+ }
342
+
343
+ ]
344
+
345
+ }
204
346
 
205
347
  ```
206
-
207
- ###console.log
208
-
209
- ![イメージ説明](24a9ab57bd6d6a570f7b48db36e798f8.jpeg)
210
-
211
- ###前回質問時、回答していただいたphpのTeraTerm実行結果
212
-
213
- ```ここに言語を入力
214
-
215
- {
216
-
217
- "nodes": [
218
-
219
- {
220
-
221
- "id": 1,
222
-
223
- "label": "testuser",
224
-
225
- "pic": ""
226
-
227
- },
228
-
229
- {
230
-
231
- "id": 2,
232
-
233
- "label": "test",
234
-
235
- "pic": ""
236
-
237
- },
238
-
239
- {
240
-
241
- "id": 11,
242
-
243
- "label": "test300",
244
-
245
- "pic": ""
246
-
247
- },
248
-
249
- {
250
-
251
- "id": 12,
252
-
253
- "label": "test400",
254
-
255
- "pic": ""
256
-
257
- },
258
-
259
- {
260
-
261
- "id": 13,
262
-
263
- "label": "test1106",
264
-
265
- "pic": ""
266
-
267
- }
268
-
269
- ],
270
-
271
- "links": [
272
-
273
- {
274
-
275
- "source": 1,
276
-
277
- "target": 2
278
-
279
- },
280
-
281
- {
282
-
283
- "source": 2,
284
-
285
- "target": 1
286
-
287
- },
288
-
289
- {
290
-
291
- "source": 12,
292
-
293
- "target": 11
294
-
295
- },
296
-
297
- {
298
-
299
- "source": 11,
300
-
301
- "target": 12
302
-
303
- },
304
-
305
- {
306
-
307
- "source": 11,
308
-
309
- "target": 13
310
-
311
- },
312
-
313
- {
314
-
315
- "source": 13,
316
-
317
- "target": 11
318
-
319
- },
320
-
321
- {
322
-
323
- "source": 11,
324
-
325
- "target": 12
326
-
327
- },
328
-
329
- {
330
-
331
- "source": 13,
332
-
333
- "target": 12
334
-
335
- }
336
-
337
- ]
338
-
339
- }
340
-
341
- ```
342
-
343
- ###追記
344
-
345
- またいかのようにコードを強引に合わせてみたところ、以下のようなエラーが出ました
346
-
347
- ```エラー
348
-
349
- TypeError: r.source is undefined //firefox
350
-
351
- Unable to get property 'weight' of undefined or null reference//edge & chrom
352
-
353
- ```
354
-
355
- ```javascript
356
-
357
- var nodes = new Array();
358
-
359
- var links = new Array();
360
-
361
-
362
-
363
- $.ajax({
364
-
365
- url: 'json4.php',
366
-
367
- type: "GET",
368
-
369
- dataType: 'json',
370
-
371
- scriptCharset:'utf-8',
372
-
373
- }).done(function(data){
374
-
375
- console.log("ajax通信に成功しました");
376
-
377
- nodes=data["nodes"];
378
-
379
- links=data["links"];
380
-
381
-
382
-
383
-
384
-
385
- function drawTest(id,dataset){
386
-
387
- var width = 1200;
388
-
389
- var height = 600;
390
-
391
-
392
-
393
-
394
-
395
- var force = d3.layout.force()
396
-
397
- .nodes(nodes)
398
-
399
- .links(links)
400
-
401
- .size([width, height])
402
-
403
- .distance(380)
404
-
405
- .friction(0.9)
406
-
407
- .charge(-800)
408
-
409
- .gravity(0.1)
410
-
411
- .start();
412
-
413
-
414
-
415
- // svg領域の作成
416
-
417
- var svg = d3.select(id)
418
-
419
- .append("svg")
420
-
421
- .attr({width:width, height:height});
422
-
423
-
424
-
425
- // link線の描画
426
-
427
- var link = svg.selectAll("line")
428
-
429
- .data(links)
430
-
431
- .enter()
432
-
433
- .append("line")
434
-
435
- .style({stroke: "#ccc",
436
-
437
- "stroke-width": 1
438
-
439
- });
440
-
441
-
442
-
443
- var g = svg.selectAll("g")
444
-
445
- .data(nodes)
446
-
447
- .enter()
448
-
449
- .append("g")
450
-
451
- .call(force.drag);
452
-
453
-
454
-
455
- var a = g.append("a")
456
-
457
- .attr({"xlink:href":function(data){ return data.url }, });
458
-
459
-
460
-
461
- var node = a.append("image")
462
-
463
- .attr({"xlink:href":function(data){ return data.pic },
464
-
465
- "width":80,
466
-
467
- "height":80
468
-
469
- });
470
-
471
-
472
-
473
-
474
-
475
-
476
-
477
- var label = a.append("text")
478
-
479
- .attr({"text-anchor":"middle",
480
-
481
- "fill":"black"})
482
-
483
- .style({"font-size":14})
484
-
485
- .text(function(data) { return data.label; });
486
-
487
-
488
-
489
-
490
-
491
-
492
-
493
- force.on("tick", function() {
494
-
495
- link.attr({x1: function(d) { return d.source.x; },
496
-
497
- y1: function(d) { return d.source.y; },
498
-
499
- x2: function(d) { return d.target.x; },
500
-
501
- y2: function(d) { return d.target.y; }});
502
-
503
- g.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
504
-
505
- });
506
-
507
- }drawTest("#test3");
508
-
509
- }).fail(function(XMLHttpRequest, textStatus, errorThrown){
510
-
511
- console.log("ajax通信に失敗しました");
512
-
513
- console.log("XMLHttpRequest : " + XMLHttpRequest.status);
514
-
515
- console.log("textStatus : " + textStatus);
516
-
517
- console.log("errorThrown : " + errorThrown.message);
518
-
519
- })
520
-
521
-
522
-
523
- ```

12

更新

2017/12/03 09:10

投稿

maigoneko
maigoneko

スコア13

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,9 @@
1
+ ###12/3更新
2
+
3
+ 自身では手詰まり感がでてしまっているので、解決まで行かないにしても、助言だけでもいただきたいです。(こう考えてみようなど、問題を明確にするうえでのアドバイスなども求めてます)
4
+
5
+
6
+
1
7
  ###前提・実現したいこと
2
8
 
3
9
  phpからdbのデータを受け取りjson出力した後、d3.jsのforce-layoutで表示してみたいと思っています。

11

タイトル

2017/12/03 07:31

投稿

maigoneko
maigoneko

スコア13

test CHANGED
@@ -1 +1 @@
1
- D3.jsでForced Layout linksがエラー?
1
+ D3.jsでForced Layout[助言だけでも求]
test CHANGED
File without changes

10

エラーブラウザ追加

2017/12/03 07:28

投稿

maigoneko
maigoneko

スコア13

test CHANGED
File without changes
test CHANGED
@@ -340,7 +340,9 @@
340
340
 
341
341
  ```エラー
342
342
 
343
- TypeError: r.source is undefined //
343
+ TypeError: r.source is undefined //firefox
344
+
345
+ Unable to get property 'weight' of undefined or null reference//edge & chrom
344
346
 
345
347
  ```
346
348
 

9

タイトルを見てほしい

2017/12/02 19:14

投稿

maigoneko
maigoneko

スコア13

test CHANGED
@@ -1 +1 @@
1
- [一部更新]D3.jsでForced Layoutが失敗する
1
+ D3.jsでForced Layout linksエラー?
test CHANGED
File without changes

8

linksが問題かもしれない

2017/12/02 19:10

投稿

maigoneko
maigoneko

スコア13

test CHANGED
File without changes
test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  今回javascriptでjson4.phpからデータを受け取り、nodesとlinksにそれぞれ入れました。しかし図が表示されません。console.logを見る限りでは入っている気がします。
12
12
 
13
- 何が原因なのかがわからず困っています(nodesとlinksが問題?)
13
+ 何が原因なのかがわからず困っています(linksが問題?)
14
14
 
15
15
  nodes=data["nodes"];
16
16
 

7

タイトル 内容更新

2017/12/02 19:00

投稿

maigoneko
maigoneko

スコア13

test CHANGED
@@ -1 +1 @@
1
- [JavaScript]D3.jsでForced Layoutが失敗する
1
+ [一部更新]D3.jsでForced Layoutが失敗する
test CHANGED
@@ -1,8 +1,6 @@
1
1
  ###前提・実現したいこと
2
2
 
3
- PHPでmysqlに接続してdbのデータをjson出力し、
4
-
5
- json出力されデータをd3.jsのforce-layoutで表示してみたいと思っています。
3
+ phpからdbデータを受け取りjson出力後、d3.jsのforce-layoutで表示してみたいと思っています。
6
4
 
7
5
 
8
6
 
@@ -10,11 +8,15 @@
10
8
 
11
9
 
12
10
 
13
- 今回javascriptでjson4.phpからデータを受け取り、nodesとlinksにそれぞれ入れました。しかし図が表示されません。console.logを見る限りでは入っている気がします。うまく参照できていないのか、あるいは何か足りていない処理があるのか・・・
11
+ 今回javascriptでjson4.phpからデータを受け取り、nodesとlinksにそれぞれ入れました。しかし図が表示されません。console.logを見る限りでは入っている気がします。
14
12
 
15
13
  何が原因なのかがわからず困っています(nodesとlinksが問題?)
16
14
 
15
+ nodes=data["nodes"];
16
+
17
+ links=data["links"];
18
+
17
- php側コードを変えずtest.htmlとgetjson.jsのコードのみを編集して表示までっていきたいとも考えていす。
19
+ 書き方で結局のところ、linksが正常に動くイマイチわかりせん・・・
18
20
 
19
21
 
20
22
 
@@ -331,3 +333,183 @@
331
333
  }
332
334
 
333
335
  ```
336
+
337
+ ###追記
338
+
339
+ またいかのようにコードを強引に合わせてみたところ、以下のようなエラーが出ました
340
+
341
+ ```エラー
342
+
343
+ TypeError: r.source is undefined //
344
+
345
+ ```
346
+
347
+ ```javascript
348
+
349
+ var nodes = new Array();
350
+
351
+ var links = new Array();
352
+
353
+
354
+
355
+ $.ajax({
356
+
357
+ url: 'json4.php',
358
+
359
+ type: "GET",
360
+
361
+ dataType: 'json',
362
+
363
+ scriptCharset:'utf-8',
364
+
365
+ }).done(function(data){
366
+
367
+ console.log("ajax通信に成功しました");
368
+
369
+ nodes=data["nodes"];
370
+
371
+ links=data["links"];
372
+
373
+
374
+
375
+
376
+
377
+ function drawTest(id,dataset){
378
+
379
+ var width = 1200;
380
+
381
+ var height = 600;
382
+
383
+
384
+
385
+
386
+
387
+ var force = d3.layout.force()
388
+
389
+ .nodes(nodes)
390
+
391
+ .links(links)
392
+
393
+ .size([width, height])
394
+
395
+ .distance(380)
396
+
397
+ .friction(0.9)
398
+
399
+ .charge(-800)
400
+
401
+ .gravity(0.1)
402
+
403
+ .start();
404
+
405
+
406
+
407
+ // svg領域の作成
408
+
409
+ var svg = d3.select(id)
410
+
411
+ .append("svg")
412
+
413
+ .attr({width:width, height:height});
414
+
415
+
416
+
417
+ // link線の描画
418
+
419
+ var link = svg.selectAll("line")
420
+
421
+ .data(links)
422
+
423
+ .enter()
424
+
425
+ .append("line")
426
+
427
+ .style({stroke: "#ccc",
428
+
429
+ "stroke-width": 1
430
+
431
+ });
432
+
433
+
434
+
435
+ var g = svg.selectAll("g")
436
+
437
+ .data(nodes)
438
+
439
+ .enter()
440
+
441
+ .append("g")
442
+
443
+ .call(force.drag);
444
+
445
+
446
+
447
+ var a = g.append("a")
448
+
449
+ .attr({"xlink:href":function(data){ return data.url }, });
450
+
451
+
452
+
453
+ var node = a.append("image")
454
+
455
+ .attr({"xlink:href":function(data){ return data.pic },
456
+
457
+ "width":80,
458
+
459
+ "height":80
460
+
461
+ });
462
+
463
+
464
+
465
+
466
+
467
+
468
+
469
+ var label = a.append("text")
470
+
471
+ .attr({"text-anchor":"middle",
472
+
473
+ "fill":"black"})
474
+
475
+ .style({"font-size":14})
476
+
477
+ .text(function(data) { return data.label; });
478
+
479
+
480
+
481
+
482
+
483
+
484
+
485
+ force.on("tick", function() {
486
+
487
+ link.attr({x1: function(d) { return d.source.x; },
488
+
489
+ y1: function(d) { return d.source.y; },
490
+
491
+ x2: function(d) { return d.target.x; },
492
+
493
+ y2: function(d) { return d.target.y; }});
494
+
495
+ g.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
496
+
497
+ });
498
+
499
+ }drawTest("#test3");
500
+
501
+ }).fail(function(XMLHttpRequest, textStatus, errorThrown){
502
+
503
+ console.log("ajax通信に失敗しました");
504
+
505
+ console.log("XMLHttpRequest : " + XMLHttpRequest.status);
506
+
507
+ console.log("textStatus : " + textStatus);
508
+
509
+ console.log("errorThrown : " + errorThrown.message);
510
+
511
+ })
512
+
513
+
514
+
515
+ ```

6

タイトル変更

2017/12/02 18:24

投稿

maigoneko
maigoneko

スコア13

test CHANGED
@@ -1 +1 @@
1
- [JavaScript]D3.jsで正常に表示されない原因わからない
1
+ [JavaScript]D3.jsでForced Layout失敗する
test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  今回javascriptでjson4.phpからデータを受け取り、nodesとlinksにそれぞれ入れました。しかし図が表示されません。console.logを見る限りでは入っている気がします。うまく参照できていないのか、あるいは何か足りていない処理があるのか・・・
14
14
 
15
- 何が原因なのかがわからず困っています
15
+ 何が原因なのかがわからず困っています(nodesとlinksが問題?)
16
16
 
17
17
  php側のコードを変えず、test.htmlとgetjson.jsのコードのみを編集して表示までもっていきたいとも考えています。
18
18
 

5

誤字などの修正

2017/12/02 18:05

投稿

maigoneko
maigoneko

スコア13

test CHANGED
File without changes
test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- 今回javascriptでjson4.phpからデータを受け取り、nodesとlinksにそれぞれ入れました。しかし表示されません。
13
+ 今回javascriptでjson4.phpからデータを受け取り、nodesとlinksにそれぞれ入れました。しかし図が表示されません。console.logを見る限りでは入っている気がします。うまく参照できていないのか、あるいは何か足りていない処理があるのか・・・
14
14
 
15
15
  何が原因なのかがわからず困っています
16
16
 

4

タイトル変更

2017/11/29 20:19

投稿

maigoneko
maigoneko

スコア13

test CHANGED
@@ -1 +1 @@
1
- [JavaScript]PHPのデータをjavascriptで受け取った後、D3.jsで表示するために
1
+ [JavaScript]D3.jsで正常に表示されない原因がわからない
test CHANGED
File without changes

3

htmlも一応変更可能に

2017/11/29 19:02

投稿

maigoneko
maigoneko

スコア13

test CHANGED
File without changes
test CHANGED
@@ -10,9 +10,13 @@
10
10
 
11
11
 
12
12
 
13
- 今回javascriptでjson4.phpからデータを受け取り、nodesとlinksにそれぞれ入れました。しかしそれだけでは**JavaScript側のコードで何か足りない**ようで表示されません。
13
+ 今回javascriptでjson4.phpからデータを受け取り、nodesとlinksにそれぞれ入れました。しかし表示されません。
14
+
14
-
15
+ 何が原因なのかがわからず困っています
16
+
15
- html側のコードとphp側のコードを変えず、getjson.jsのコードのみを編集して表示までもっていきたいと考えています。
17
+ php側のコードを変えず、test.htmlとgetjson.jsのコードのみを編集して表示までもっていきたいと考えています。
18
+
19
+
16
20
 
17
21
  ###(getjson.js)のソースコード
18
22
 
@@ -36,7 +40,7 @@
36
40
 
37
41
  console.log("ajax通信に成功しました");
38
42
 
39
- //ここら辺の処理が何か足りてない?
43
+
40
44
 
41
45
  nodes=data["nodes"];
42
46
 
@@ -62,7 +66,135 @@
62
66
 
63
67
  ```
64
68
 
65
-
69
+ ###(test.html)のソースコード
70
+
71
+ ```html
72
+
73
+ <script type="text/javascript" src="getjson.js">
74
+
75
+ var width = 1200;
76
+
77
+ var height = 600;
78
+
79
+
80
+
81
+ var force = d3.layout.force() //後で微調整する10/30
82
+
83
+ .nodes(nodes)
84
+
85
+ .links(links)
86
+
87
+ .size([width, height])
88
+
89
+ .distance(380)
90
+
91
+ .friction(0.9)
92
+
93
+ .charge(-800)
94
+
95
+ .gravity(0.1)
96
+
97
+ .start();
98
+
99
+
100
+
101
+ // svg領域の作成
102
+
103
+ var svg = d3.select("body")
104
+
105
+ .append("svg")
106
+
107
+ .attr({width:width, height:height});
108
+
109
+
110
+
111
+ // link線の描画
112
+
113
+ var link = svg.selectAll("line")
114
+
115
+ .data(links)
116
+
117
+ .enter()
118
+
119
+ .append("line")
120
+
121
+ .style({stroke: "#ccc",
122
+
123
+ "stroke-width": 1
124
+
125
+ });
126
+
127
+
128
+
129
+ var g = svg.selectAll("g")
130
+
131
+ .data(nodes)
132
+
133
+ .enter()
134
+
135
+ .append("g")
136
+
137
+ .call(force.drag);
138
+
139
+
140
+
141
+ var a = g.append("a") //個人的にあとで必要
142
+
143
+ .attr({"xlink:href":function(data){ return data.url }, });
144
+
145
+
146
+
147
+ var node = a.append("image")
148
+
149
+ .attr({"xlink:href":function(data){ return data.pic },
150
+
151
+ "width":80,
152
+
153
+ "height":80
154
+
155
+ });
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
+ var label = a.append("text")
164
+
165
+ .attr({"text-anchor":"middle",
166
+
167
+ "fill":"black"})
168
+
169
+ .style({"font-size":14})
170
+
171
+ .text(function(data) { return data.label; });
172
+
173
+
174
+
175
+
176
+
177
+
178
+
179
+ force.on("tick", function() {
180
+
181
+ link.attr({x1: function(d) { return d.source.x; },
182
+
183
+ y1: function(d) { return d.source.y; },
184
+
185
+ x2: function(d) { return d.target.x; },
186
+
187
+ y2: function(d) { return d.target.y; }});
188
+
189
+ g.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
190
+
191
+ });
192
+
193
+ </script>
194
+
195
+
196
+
197
+ ```
66
198
 
67
199
  ###console.log
68
200
 
@@ -199,45 +331,3 @@
199
331
  }
200
332
 
201
333
  ```
202
-
203
- ###HTML内一部
204
-
205
- ```html
206
-
207
-
208
-
209
- <script type="text/javascript" src="getjson.js">
210
-
211
- var width = 1200;
212
-
213
- var height = 600;
214
-
215
-
216
-
217
- var force = d3.layout.force()
218
-
219
- .nodes(nodes) //ここでnodes = data["nodes"]
220
-
221
- .links(links) //ここでlinks = data["links"]
222
-
223
- .size([width, height])
224
-
225
- .distance(380)
226
-
227
- .friction(0.9)
228
-
229
- .charge(-800)
230
-
231
- .gravity(0.1)
232
-
233
- .start();
234
-
235
-
236
-
237
-
238
-
239
- ```
240
-
241
- ###追記(疑問)
242
-
243
- JSONparseは今回の場合だと必要なのでしょうか?

2

タイトル変更

2017/11/29 17:26

投稿

maigoneko
maigoneko

スコア13

test CHANGED
@@ -1 +1 @@
1
- [D3.js]PHPのデータをjavascriptで受け取った後、D3.jsで表示するために必要な何か
1
+ [JavaScript]PHPのデータをjavascriptで受け取った後、D3.jsで表示するために
test CHANGED
File without changes

1

追記(疑問)

2017/11/29 15:10

投稿

maigoneko
maigoneko

スコア13

test CHANGED
File without changes
test CHANGED
@@ -237,3 +237,7 @@
237
237
 
238
238
 
239
239
  ```
240
+
241
+ ###追記(疑問)
242
+
243
+ JSONparseは今回の場合だと必要なのでしょうか?