@@ -322,16 +322,104 @@ def test_default_dendrogram(self):
322
322
self .assert_dict_equal (dendro ['layout' ], expected_dendro ['layout' ])
323
323
324
324
def test_dendrogram_random_matrix (self ):
325
+
325
326
# create a random uncorrelated matrix
326
327
X = np .random .rand (5 , 5 )
328
+
327
329
# variable 2 is correlated with all the other variables
328
330
X [2 , :] = sum (X , 0 )
329
331
330
332
names = ['Jack' , 'Oxana' , 'John' , 'Chelsea' , 'Mark' ]
331
333
dendro = tls .FigureFactory .create_dendrogram (X , labels = names )
332
334
333
- # Check that 2 is in a separate cluster and it's labelled correctly
334
- self .assertEqual (dendro ['layout' ]['xaxis' ]['ticktext' ][0 ], 'John' )
335
+ expected_dendro = go .Figure (
336
+ data = go .Data ([
337
+ go .Scatter (
338
+ marker = go .Marker (color = 'rgb(61,153,112)' ),
339
+ mode = 'lines' ,
340
+ xaxis = 'x' ,
341
+ yaxis = 'y'
342
+ ),
343
+ go .Scatter (
344
+ marker = go .Marker (
345
+ color = 'rgb(61,153,112)'
346
+ ),
347
+ mode = 'lines' ,
348
+ xaxis = 'x' ,
349
+ yaxis = 'y'
350
+ ),
351
+ go .Scatter (
352
+ marker = go .Marker (color = 'rgb(61,153,112)' ),
353
+ mode = 'lines' ,
354
+ xaxis = 'x' ,
355
+ yaxis = 'y'
356
+ ),
357
+ go .Scatter (
358
+ marker = go .Marker (color = 'rgb(0,116,217)' ),
359
+ mode = 'lines' ,
360
+ xaxis = 'x' ,
361
+ yaxis = 'y'
362
+ )
363
+ ]),
364
+ layout = go .Layout (
365
+ autosize = False ,
366
+ height = '100%' ,
367
+ hovermode = 'closest' ,
368
+ showlegend = False ,
369
+ width = '100%' ,
370
+ xaxis = go .XAxis (
371
+ mirror = 'allticks' ,
372
+ rangemode = 'tozero' ,
373
+ showgrid = False ,
374
+ showline = True ,
375
+ showticklabels = True ,
376
+ tickmode = 'array' ,
377
+ ticks = 'outside' ,
378
+ tickvals = [5.0 , 15.0 , 25.0 , 35.0 , 45.0 ],
379
+ type = 'linear' ,
380
+ zeroline = False
381
+ ),
382
+ yaxis = go .YAxis (
383
+ mirror = 'allticks' ,
384
+ rangemode = 'tozero' ,
385
+ showgrid = False ,
386
+ showline = True ,
387
+ showticklabels = True ,
388
+ ticks = 'outside' ,
389
+ type = 'linear' ,
390
+ zeroline = False
391
+ )
392
+ )
393
+ )
394
+
395
+ self .assertEqual (len (dendro ['data' ]), 4 )
396
+
397
+ # it's random, so we can only check that the values aren't equal
398
+ y_vals = [dendro ['data' ][0 ].pop ('y' ), dendro ['data' ][1 ].pop ('y' ),
399
+ dendro ['data' ][2 ].pop ('y' ), dendro ['data' ][3 ].pop ('y' )]
400
+ for i in range (len (y_vals )):
401
+ for j in range (len (y_vals )):
402
+ if i != j :
403
+ self .assertFalse (np .allclose (y_vals [i ], y_vals [j ]))
404
+
405
+ x_vals = [dendro ['data' ][0 ].pop ('x' ), dendro ['data' ][1 ].pop ('x' ),
406
+ dendro ['data' ][2 ].pop ('x' ), dendro ['data' ][3 ].pop ('x' )]
407
+ for i in range (len (x_vals )):
408
+ for j in range (len (x_vals )):
409
+ if i != j :
410
+ self .assertFalse (np .allclose (x_vals [i ], x_vals [j ]))
411
+
412
+ # we also need to check the ticktext manually
413
+ xaxis_ticktext = dendro ['layout' ]['xaxis' ].pop ('ticktext' )
414
+ self .assertEqual (xaxis_ticktext [0 ], 'John' )
415
+
416
+ # this is actually a bit clearer when debugging tests.
417
+ self .assert_dict_equal (dendro ['data' ][0 ], expected_dendro ['data' ][0 ])
418
+ self .assert_dict_equal (dendro ['data' ][1 ], expected_dendro ['data' ][1 ])
419
+ self .assert_dict_equal (dendro ['data' ][2 ], expected_dendro ['data' ][2 ])
420
+ self .assert_dict_equal (dendro ['data' ][3 ], expected_dendro ['data' ][3 ])
421
+
422
+ self .assert_dict_equal (dendro ['layout' ], expected_dendro ['layout' ])
335
423
336
424
def test_dendrogram_orientation (self ):
337
425
X = np .random .rand (5 , 5 )
0 commit comments