scikit-network 0.30.0__cp310-cp310-win_amd64.whl → 0.32.1__cp310-cp310-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of scikit-network might be problematic. Click here for more details.
- {scikit_network-0.30.0.dist-info → scikit_network-0.32.1.dist-info}/AUTHORS.rst +3 -0
- {scikit_network-0.30.0.dist-info → scikit_network-0.32.1.dist-info}/METADATA +31 -3
- scikit_network-0.32.1.dist-info/RECORD +228 -0
- {scikit_network-0.30.0.dist-info → scikit_network-0.32.1.dist-info}/WHEEL +1 -1
- sknetwork/__init__.py +1 -1
- sknetwork/base.py +67 -0
- sknetwork/classification/base.py +24 -24
- sknetwork/classification/base_rank.py +17 -25
- sknetwork/classification/diffusion.py +35 -35
- sknetwork/classification/knn.py +24 -21
- sknetwork/classification/metrics.py +1 -1
- sknetwork/classification/pagerank.py +10 -10
- sknetwork/classification/propagation.py +23 -20
- sknetwork/classification/tests/test_diffusion.py +13 -3
- sknetwork/classification/vote.cp310-win_amd64.pyd +0 -0
- sknetwork/classification/vote.cpp +14482 -10351
- sknetwork/classification/vote.pyx +1 -3
- sknetwork/clustering/__init__.py +3 -1
- sknetwork/clustering/base.py +36 -40
- sknetwork/clustering/kcenters.py +253 -0
- sknetwork/clustering/leiden.py +241 -0
- sknetwork/clustering/leiden_core.cp310-win_amd64.pyd +0 -0
- sknetwork/clustering/leiden_core.cpp +31564 -0
- sknetwork/clustering/leiden_core.pyx +124 -0
- sknetwork/clustering/louvain.py +133 -102
- sknetwork/clustering/louvain_core.cp310-win_amd64.pyd +0 -0
- sknetwork/clustering/louvain_core.cpp +22457 -18792
- sknetwork/clustering/louvain_core.pyx +86 -96
- sknetwork/clustering/postprocess.py +2 -2
- sknetwork/clustering/propagation_clustering.py +15 -19
- sknetwork/clustering/tests/test_API.py +8 -4
- sknetwork/clustering/tests/test_kcenters.py +92 -0
- sknetwork/clustering/tests/test_leiden.py +34 -0
- sknetwork/clustering/tests/test_louvain.py +3 -4
- sknetwork/data/__init__.py +2 -1
- sknetwork/data/base.py +28 -0
- sknetwork/data/load.py +38 -37
- sknetwork/data/models.py +18 -18
- sknetwork/data/parse.py +54 -33
- sknetwork/data/test_graphs.py +2 -2
- sknetwork/data/tests/test_API.py +1 -1
- sknetwork/data/tests/test_base.py +14 -0
- sknetwork/data/tests/test_load.py +1 -1
- sknetwork/data/tests/test_parse.py +9 -12
- sknetwork/data/tests/test_test_graphs.py +1 -2
- sknetwork/data/toy_graphs.py +18 -18
- sknetwork/embedding/__init__.py +0 -1
- sknetwork/embedding/base.py +21 -20
- sknetwork/embedding/force_atlas.py +3 -2
- sknetwork/embedding/louvain_embedding.py +2 -2
- sknetwork/embedding/random_projection.py +5 -3
- sknetwork/embedding/spectral.py +0 -73
- sknetwork/embedding/tests/test_API.py +4 -28
- sknetwork/embedding/tests/test_louvain_embedding.py +4 -9
- sknetwork/embedding/tests/test_random_projection.py +2 -2
- sknetwork/embedding/tests/test_spectral.py +5 -8
- sknetwork/embedding/tests/test_svd.py +1 -1
- sknetwork/gnn/base.py +4 -4
- sknetwork/gnn/base_layer.py +3 -3
- sknetwork/gnn/gnn_classifier.py +45 -89
- sknetwork/gnn/layer.py +1 -1
- sknetwork/gnn/loss.py +1 -1
- sknetwork/gnn/optimizer.py +4 -3
- sknetwork/gnn/tests/test_base_layer.py +4 -4
- sknetwork/gnn/tests/test_gnn_classifier.py +12 -35
- sknetwork/gnn/utils.py +8 -8
- sknetwork/hierarchy/base.py +29 -2
- sknetwork/hierarchy/louvain_hierarchy.py +45 -41
- sknetwork/hierarchy/paris.cp310-win_amd64.pyd +0 -0
- sknetwork/hierarchy/paris.cpp +27369 -22852
- sknetwork/hierarchy/paris.pyx +7 -9
- sknetwork/hierarchy/postprocess.py +16 -16
- sknetwork/hierarchy/tests/test_API.py +1 -1
- sknetwork/hierarchy/tests/test_algos.py +5 -0
- sknetwork/hierarchy/tests/test_metrics.py +1 -1
- sknetwork/linalg/__init__.py +1 -1
- sknetwork/linalg/diteration.cp310-win_amd64.pyd +0 -0
- sknetwork/linalg/diteration.cpp +13474 -9454
- sknetwork/linalg/diteration.pyx +0 -2
- sknetwork/linalg/eig_solver.py +1 -1
- sknetwork/linalg/{normalization.py → normalizer.py} +18 -15
- sknetwork/linalg/operators.py +1 -1
- sknetwork/linalg/ppr_solver.py +1 -1
- sknetwork/linalg/push.cp310-win_amd64.pyd +0 -0
- sknetwork/linalg/push.cpp +22993 -18807
- sknetwork/linalg/push.pyx +0 -2
- sknetwork/linalg/svd_solver.py +1 -1
- sknetwork/linalg/tests/test_normalization.py +3 -7
- sknetwork/linalg/tests/test_operators.py +4 -8
- sknetwork/linalg/tests/test_ppr.py +1 -1
- sknetwork/linkpred/base.py +13 -2
- sknetwork/linkpred/nn.py +6 -6
- sknetwork/log.py +19 -0
- sknetwork/path/__init__.py +4 -3
- sknetwork/path/dag.py +54 -0
- sknetwork/path/distances.py +98 -0
- sknetwork/path/search.py +13 -47
- sknetwork/path/shortest_path.py +37 -162
- sknetwork/path/tests/test_dag.py +37 -0
- sknetwork/path/tests/test_distances.py +62 -0
- sknetwork/path/tests/test_search.py +26 -11
- sknetwork/path/tests/test_shortest_path.py +31 -36
- sknetwork/ranking/__init__.py +0 -1
- sknetwork/ranking/base.py +13 -8
- sknetwork/ranking/betweenness.cp310-win_amd64.pyd +0 -0
- sknetwork/ranking/betweenness.cpp +5709 -3017
- sknetwork/ranking/betweenness.pyx +0 -2
- sknetwork/ranking/closeness.py +7 -10
- sknetwork/ranking/pagerank.py +14 -14
- sknetwork/ranking/postprocess.py +12 -3
- sknetwork/ranking/tests/test_API.py +2 -4
- sknetwork/ranking/tests/test_betweenness.py +3 -3
- sknetwork/ranking/tests/test_closeness.py +3 -7
- sknetwork/ranking/tests/test_pagerank.py +11 -5
- sknetwork/ranking/tests/test_postprocess.py +5 -0
- sknetwork/regression/base.py +19 -2
- sknetwork/regression/diffusion.py +24 -10
- sknetwork/regression/tests/test_diffusion.py +8 -0
- sknetwork/test_base.py +35 -0
- sknetwork/test_log.py +15 -0
- sknetwork/topology/__init__.py +7 -8
- sknetwork/topology/cliques.cp310-win_amd64.pyd +0 -0
- sknetwork/topology/{kcliques.cpp → cliques.cpp} +23412 -20276
- sknetwork/topology/cliques.pyx +149 -0
- sknetwork/topology/core.cp310-win_amd64.pyd +0 -0
- sknetwork/topology/{kcore.cpp → core.cpp} +21732 -18867
- sknetwork/topology/core.pyx +90 -0
- sknetwork/topology/cycles.py +243 -0
- sknetwork/topology/minheap.cp310-win_amd64.pyd +0 -0
- sknetwork/{utils → topology}/minheap.cpp +19452 -15368
- sknetwork/{utils → topology}/minheap.pxd +1 -3
- sknetwork/{utils → topology}/minheap.pyx +1 -3
- sknetwork/topology/structure.py +3 -43
- sknetwork/topology/tests/test_cliques.py +11 -11
- sknetwork/topology/tests/test_core.py +19 -0
- sknetwork/topology/tests/test_cycles.py +65 -0
- sknetwork/topology/tests/test_structure.py +2 -16
- sknetwork/topology/tests/test_triangles.py +11 -15
- sknetwork/topology/tests/test_wl.py +72 -0
- sknetwork/topology/triangles.cp310-win_amd64.pyd +0 -0
- sknetwork/topology/triangles.cpp +5056 -2696
- sknetwork/topology/triangles.pyx +74 -89
- sknetwork/topology/weisfeiler_lehman.py +56 -86
- sknetwork/topology/weisfeiler_lehman_core.cp310-win_amd64.pyd +0 -0
- sknetwork/topology/weisfeiler_lehman_core.cpp +14727 -10622
- sknetwork/topology/weisfeiler_lehman_core.pyx +0 -2
- sknetwork/utils/__init__.py +1 -31
- sknetwork/utils/check.py +2 -2
- sknetwork/utils/format.py +5 -3
- sknetwork/utils/membership.py +2 -2
- sknetwork/utils/tests/test_check.py +3 -3
- sknetwork/utils/tests/test_format.py +3 -1
- sknetwork/utils/values.py +1 -1
- sknetwork/visualization/__init__.py +2 -2
- sknetwork/visualization/dendrograms.py +55 -7
- sknetwork/visualization/graphs.py +292 -72
- sknetwork/visualization/tests/test_dendrograms.py +9 -9
- sknetwork/visualization/tests/test_graphs.py +71 -62
- scikit_network-0.30.0.dist-info/RECORD +0 -227
- sknetwork/embedding/louvain_hierarchy.py +0 -142
- sknetwork/embedding/tests/test_louvain_hierarchy.py +0 -19
- sknetwork/path/metrics.py +0 -148
- sknetwork/path/tests/test_metrics.py +0 -29
- sknetwork/ranking/harmonic.py +0 -82
- sknetwork/topology/dag.py +0 -74
- sknetwork/topology/dag_core.cp310-win_amd64.pyd +0 -0
- sknetwork/topology/dag_core.cpp +0 -23350
- sknetwork/topology/dag_core.pyx +0 -38
- sknetwork/topology/kcliques.cp310-win_amd64.pyd +0 -0
- sknetwork/topology/kcliques.pyx +0 -193
- sknetwork/topology/kcore.cp310-win_amd64.pyd +0 -0
- sknetwork/topology/kcore.pyx +0 -120
- sknetwork/topology/tests/test_cores.py +0 -21
- sknetwork/topology/tests/test_dag.py +0 -26
- sknetwork/topology/tests/test_wl_coloring.py +0 -49
- sknetwork/topology/tests/test_wl_kernel.py +0 -31
- sknetwork/utils/base.py +0 -35
- sknetwork/utils/minheap.cp310-win_amd64.pyd +0 -0
- sknetwork/utils/simplex.py +0 -140
- sknetwork/utils/tests/test_base.py +0 -28
- sknetwork/utils/tests/test_bunch.py +0 -16
- sknetwork/utils/tests/test_projection_simplex.py +0 -33
- sknetwork/utils/tests/test_verbose.py +0 -15
- sknetwork/utils/verbose.py +0 -37
- {scikit_network-0.30.0.dist-info → scikit_network-0.32.1.dist-info}/LICENSE +0 -0
- {scikit_network-0.30.0.dist-info → scikit_network-0.32.1.dist-info}/top_level.txt +0 -0
- /sknetwork/{utils → data}/timeout.py +0 -0
sknetwork/utils/__init__.py
CHANGED
|
@@ -1,37 +1,7 @@
|
|
|
1
1
|
"""utils module"""
|
|
2
|
+
from sknetwork.data import Bunch
|
|
2
3
|
from sknetwork.utils.check import is_symmetric
|
|
3
4
|
from sknetwork.utils.format import *
|
|
4
5
|
from sknetwork.utils.membership import get_membership, from_membership
|
|
5
6
|
from sknetwork.utils.neighbors import get_neighbors, get_degrees, get_weights
|
|
6
|
-
from sknetwork.utils.simplex import projection_simplex, projection_simplex_array, projection_simplex_csr
|
|
7
7
|
from sknetwork.utils.tfidf import get_tfidf
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class Bunch(dict):
|
|
11
|
-
"""Container object for datasets.
|
|
12
|
-
Dictionary-like object that exposes its keys as attributes.
|
|
13
|
-
|
|
14
|
-
This code is taken from scikit-learn.
|
|
15
|
-
>>> bunch = Bunch(a=1, b=2)
|
|
16
|
-
>>> bunch['a']
|
|
17
|
-
1
|
|
18
|
-
>>> bunch.a
|
|
19
|
-
1
|
|
20
|
-
>>> bunch.b = 3
|
|
21
|
-
>>> bunch['b']
|
|
22
|
-
3
|
|
23
|
-
>>> bunch.c = 4
|
|
24
|
-
>>> bunch['c']
|
|
25
|
-
4
|
|
26
|
-
"""
|
|
27
|
-
def __init__(self, **kwargs):
|
|
28
|
-
super().__init__(kwargs)
|
|
29
|
-
|
|
30
|
-
def __setattr__(self, key, value):
|
|
31
|
-
self[key] = value
|
|
32
|
-
|
|
33
|
-
def __getattr__(self, key):
|
|
34
|
-
try:
|
|
35
|
-
return self[key]
|
|
36
|
-
except KeyError:
|
|
37
|
-
raise AttributeError(key)
|
sknetwork/utils/check.py
CHANGED
|
@@ -121,7 +121,7 @@ def make_weights(distribution: str, adjacency: sparse.csr_matrix) -> np.ndarray:
|
|
|
121
121
|
|
|
122
122
|
|
|
123
123
|
def check_format(input_matrix: Union[sparse.csr_matrix, sparse.csc_matrix, sparse.coo_matrix, sparse.lil_matrix,
|
|
124
|
-
np.ndarray]) -> sparse.csr_matrix:
|
|
124
|
+
np.ndarray], allow_empty: bool = False) -> sparse.csr_matrix:
|
|
125
125
|
"""Check whether the matrix is a NumPy array or a Scipy sparse matrix and return
|
|
126
126
|
the corresponding Scipy CSR matrix.
|
|
127
127
|
"""
|
|
@@ -129,7 +129,7 @@ def check_format(input_matrix: Union[sparse.csr_matrix, sparse.csc_matrix, spars
|
|
|
129
129
|
if type(input_matrix) not in formats:
|
|
130
130
|
raise TypeError('The input matrix must be in Scipy sparse format or Numpy ndarray format.')
|
|
131
131
|
input_matrix = sparse.csr_matrix(input_matrix)
|
|
132
|
-
if input_matrix.nnz == 0:
|
|
132
|
+
if not allow_empty and input_matrix.nnz == 0:
|
|
133
133
|
raise ValueError('The input matrix is empty.')
|
|
134
134
|
return input_matrix
|
|
135
135
|
|
sknetwork/utils/format.py
CHANGED
|
@@ -30,7 +30,7 @@ def directed2undirected(adjacency: Union[sparse.csr_matrix, SparseLR],
|
|
|
30
30
|
|
|
31
31
|
or
|
|
32
32
|
|
|
33
|
-
:math:`\\max(A,A^T)`
|
|
33
|
+
:math:`\\max(A,A^T) > 0` (binary)
|
|
34
34
|
|
|
35
35
|
If the initial adjacency matrix :math:`A` is binary, bidirectional edges have weight 2
|
|
36
36
|
(first method, default) or 1 (second method).
|
|
@@ -134,7 +134,7 @@ def bipartite2undirected(biadjacency: Union[sparse.csr_matrix, SparseLR]) -> Uni
|
|
|
134
134
|
|
|
135
135
|
|
|
136
136
|
def get_adjacency(input_matrix: Union[sparse.csr_matrix, np.ndarray], allow_directed: bool = True,
|
|
137
|
-
force_bipartite: bool = False, force_directed: bool = False)\
|
|
137
|
+
force_bipartite: bool = False, force_directed: bool = False, allow_empty: bool = False)\
|
|
138
138
|
-> Tuple[sparse.csr_matrix, bool]:
|
|
139
139
|
"""Check the input matrix and return a proper adjacency matrix.
|
|
140
140
|
Parameters
|
|
@@ -150,8 +150,10 @@ def get_adjacency(input_matrix: Union[sparse.csr_matrix, np.ndarray], allow_dire
|
|
|
150
150
|
force_directed :
|
|
151
151
|
If ``True`` return :math:`A = \\begin{bmatrix} 0 & B \\\\ 0 & 0 \\end{bmatrix}`.
|
|
152
152
|
Otherwise (default), return :math:`A = \\begin{bmatrix} 0 & B \\\\ B^T & 0 \\end{bmatrix}`.
|
|
153
|
+
allow_empty :
|
|
154
|
+
If ``True``, allow the input matrix to be empty.
|
|
153
155
|
"""
|
|
154
|
-
input_matrix = check_format(input_matrix)
|
|
156
|
+
input_matrix = check_format(input_matrix, allow_empty=allow_empty)
|
|
155
157
|
bipartite = False
|
|
156
158
|
if force_bipartite or not is_square(input_matrix) or not (allow_directed or is_symmetric(input_matrix)):
|
|
157
159
|
bipartite = True
|
sknetwork/utils/membership.py
CHANGED
|
@@ -20,9 +20,9 @@ def get_membership(labels: np.ndarray, dtype=bool, n_labels: Optional[int] = Non
|
|
|
20
20
|
Parameters
|
|
21
21
|
----------
|
|
22
22
|
labels :
|
|
23
|
-
Label of each node.
|
|
23
|
+
Label of each node (integers).
|
|
24
24
|
dtype :
|
|
25
|
-
Type of the
|
|
25
|
+
Type of the output. Boolean by default.
|
|
26
26
|
n_labels : int
|
|
27
27
|
Number of labels.
|
|
28
28
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import unittest
|
|
5
5
|
|
|
6
6
|
from sknetwork.data import cyclic_digraph
|
|
7
|
-
from sknetwork.data.test_graphs import
|
|
7
|
+
from sknetwork.data.test_graphs import test_disconnected_graph
|
|
8
8
|
from sknetwork.utils.check import *
|
|
9
9
|
from sknetwork.utils.format import check_csr_or_slr
|
|
10
10
|
|
|
@@ -26,7 +26,7 @@ class TestChecks(unittest.TestCase):
|
|
|
26
26
|
|
|
27
27
|
def test_check_connected(self):
|
|
28
28
|
with self.assertRaises(ValueError):
|
|
29
|
-
check_connected(
|
|
29
|
+
check_connected(test_disconnected_graph())
|
|
30
30
|
|
|
31
31
|
def test_check_symmetry(self):
|
|
32
32
|
with self.assertRaises(ValueError):
|
|
@@ -153,7 +153,7 @@ class TestChecks(unittest.TestCase):
|
|
|
153
153
|
adjacency = cyclic_digraph(3)
|
|
154
154
|
with self.assertRaises(ValueError):
|
|
155
155
|
check_scaling(-1, adjacency, regularize=True)
|
|
156
|
-
adjacency =
|
|
156
|
+
adjacency = test_disconnected_graph()
|
|
157
157
|
with self.assertRaises(ValueError):
|
|
158
158
|
check_scaling(-1, adjacency, regularize=False)
|
|
159
159
|
|
|
@@ -58,4 +58,6 @@ class TestFormats(unittest.TestCase):
|
|
|
58
58
|
|
|
59
59
|
def test_check(self):
|
|
60
60
|
with self.assertRaises(ValueError):
|
|
61
|
-
check_format(sparse.csr_matrix((3, 4)))
|
|
61
|
+
check_format(sparse.csr_matrix((3, 4)), allow_empty=False)
|
|
62
|
+
adjacency = check_format(np.array([[0, 2], [2, 3]]))
|
|
63
|
+
self.assertTrue(adjacency.shape == (2, 2))
|
sknetwork/utils/values.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
"""Visualization module."""
|
|
2
2
|
|
|
3
|
-
from sknetwork.visualization.dendrograms import svg_dendrogram
|
|
4
|
-
from sknetwork.visualization.graphs import svg_graph, svg_bigraph
|
|
3
|
+
from sknetwork.visualization.dendrograms import visualize_dendrogram, svg_dendrogram
|
|
4
|
+
from sknetwork.visualization.graphs import visualize_graph, visualize_bigraph, svg_graph, svg_bigraph
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
# -*- coding: utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Created
|
|
4
|
+
Created in April 2020
|
|
5
5
|
@author: Thomas Bonald <bonald@enst.fr>
|
|
6
6
|
"""
|
|
7
7
|
from typing import Iterable, Optional
|
|
@@ -158,12 +158,12 @@ def svg_dendrogram_left(dendrogram, names, width, height, margin, margin_text, s
|
|
|
158
158
|
return svg
|
|
159
159
|
|
|
160
160
|
|
|
161
|
-
def
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
"""Return
|
|
161
|
+
def visualize_dendrogram(dendrogram: np.ndarray, names: Optional[np.ndarray] = None, rotate: bool = False,
|
|
162
|
+
width: float = 400, height: float = 300, margin: float = 10, margin_text: float = 5,
|
|
163
|
+
scale: float = 1, line_width: float = 2, n_clusters: int = 2, color: str = 'black',
|
|
164
|
+
colors: Optional[Iterable] = None, font_size: int = 12, reorder: bool = False,
|
|
165
|
+
rotate_names: bool = True, filename: Optional[str] = None):
|
|
166
|
+
"""Return the image of a dendrogram in SVG format.
|
|
167
167
|
|
|
168
168
|
Parameters
|
|
169
169
|
----------
|
|
@@ -227,3 +227,51 @@ def svg_dendrogram(dendrogram: np.ndarray, names: Optional[np.ndarray] = None, r
|
|
|
227
227
|
f.write(svg)
|
|
228
228
|
|
|
229
229
|
return svg
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
def svg_dendrogram(dendrogram: np.ndarray, names: Optional[np.ndarray] = None, rotate: bool = False, width: float = 400,
|
|
233
|
+
height: float = 300, margin: float = 10, margin_text: float = 5, scale: float = 1,
|
|
234
|
+
line_width: float = 2, n_clusters: int = 2, color: str = 'black', colors: Optional[Iterable] = None,
|
|
235
|
+
font_size: int = 12, reorder: bool = False, rotate_names: bool = True,
|
|
236
|
+
filename: Optional[str] = None):
|
|
237
|
+
"""Return the image of a dendrogram in SVG format.
|
|
238
|
+
|
|
239
|
+
Alias for visualize_dendrogram.
|
|
240
|
+
|
|
241
|
+
Parameters
|
|
242
|
+
----------
|
|
243
|
+
dendrogram :
|
|
244
|
+
Dendrogram to display.
|
|
245
|
+
names :
|
|
246
|
+
Names of leaves.
|
|
247
|
+
rotate :
|
|
248
|
+
If ``True``, rotate the tree so that the root is on the left.
|
|
249
|
+
width :
|
|
250
|
+
Width of the image (margins excluded).
|
|
251
|
+
height :
|
|
252
|
+
Height of the image (margins excluded).
|
|
253
|
+
margin :
|
|
254
|
+
Margin.
|
|
255
|
+
margin_text :
|
|
256
|
+
Margin between leaves and their names, if any.
|
|
257
|
+
scale :
|
|
258
|
+
Scaling factor.
|
|
259
|
+
line_width :
|
|
260
|
+
Line width.
|
|
261
|
+
n_clusters :
|
|
262
|
+
Number of coloured clusters to display.
|
|
263
|
+
color :
|
|
264
|
+
Default SVG color for the dendrogram.
|
|
265
|
+
colors :
|
|
266
|
+
SVG colors of the clusters of the dendrogram (optional).
|
|
267
|
+
font_size :
|
|
268
|
+
Font size.
|
|
269
|
+
reorder :
|
|
270
|
+
If ``True``, reorder leaves so that left subtree has more leaves than right subtree.
|
|
271
|
+
rotate_names :
|
|
272
|
+
If ``True``, rotate names of leaves (only valid if **rotate** is ``False``).
|
|
273
|
+
filename :
|
|
274
|
+
Filename for saving image (optional).
|
|
275
|
+
"""
|
|
276
|
+
return visualize_dendrogram(dendrogram, names, rotate, width, height, margin, margin_text, scale, line_width,
|
|
277
|
+
n_clusters, color, colors, font_size, reorder, rotate_names, filename)
|