Overlapping of nodes in the draw diagram
Ramshell opened this issue · 1 comments
Ramshell commented
Describe the bug
The draw function overlaps edges, making it seem that they share nodes.
To Reproduce
Steps to reproduce the behavior:
- Run the following code
import matplotlib.pyplot as plt
import hypernetx as hnx
articles = {
'CA': ('1', '3', '5', '6', '13', '80', '92', '8', '24', '36', '63', '75', '86', '88', '91',
'10', '33', '57', '84', '27', '50', '67', '18', '60', '69', '81', '23', '31', '45', '87',
'4', '71', '16', '17', '30', '55', '62', '93', '2', '19', '48', '7', '14', '15', '44', '58'),
'MRDM': ('1', '3', '5', '6', '13', '27', '38', '42', '67', '80',
'92', '9', '23', '29', '31', '34', '35', '45', '87', '88',
'33', '84', '18', '74', '98', '21', '82', '11', '19', '48',
'53', '61', '73', '85', '96', '97', '99', '7', '44', '95', '40', '76'),
'DA': ('16', '17', '30', '62', '93', '50', '14', '15', '39', '40', '41', '76'),
'Graphs': ('9', '23', '29', '31', '34', '35', '45', '87',),
'Onto': ('1', '3', '5', '6', '13', '27', '38', '42', '67', '80', '92', '50',),
}
H = hnx.Hypergraph(articles)
kwargs = {
'with_node_labels': True,
'with_node_counts': False,
'with_edge_counts': False,
}
hnx.drawing.draw(
H_collapsed,
edges_kwargs={
'linewidths': 2,
},
nodes_kwargs={
'facecolors': colors
},
edge_labels_kwargs={
'fontsize': 16,
},
**kwargs)
plt.show()
Expected behavior
Edges should have node inside them only when they're actually part of them.
Environment (please complete the following information):
- OS: Linux
- Python Version Py3.9
brendapraggastis commented
@Ramshell The draw function often has overlapping or planarity issues when there are a large number of nodes. There are a couple of things you can do.
- Change the layout. Any networkx layout may be used.
- Set return_pos=True, then tweek the returned dictionary of node positions until things line up the way you want.
- Collapse the nodes and return the equivalence classes. This would be my choice.
Equivalence classes in a dictionary:
{'10: 17': ['10', '2', '24', '36', '4', '55', '57', '58', '60', '63', '69', '71', '75', '8', '81', '86', '91'], '11: 13': ['11', '21', '53', '61', '73', '74', '82', '85', '95', '96', '97', '98', '99'], '1: 9': ['1', '13', '27', '3', '5', '6', '67', '80', '92'], '14: 7': ['14', '15', '16', '17', '30', '62', '93'], '18: 8': ['18', '19', '33', '44', '48', '7', '84', '88'], '29: 4': ['29', '34', '35', '9'], '23: 4': ['23', '31', '45', '87'], '38: 2': ['38', '42'], '39: 2': ['39', '41'], '40: 2': ['40', '76'], '50: 1': ['50']}
You can rename the node labels to use representatives you wish to emphasize as well.