summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoss Barnowski <rossbar@berkeley.edu>2021-08-30 10:50:17 -0500
committerGitHub <noreply@github.com>2021-08-30 18:50:17 +0300
commita8b907df38d9d36f77d75c65d9e6a5518b849c6b (patch)
treed2dfad97d52779b85afb3296dfd6b67077b62e4f
parent2e61dacc1ffcdcf44edb5fd68dca5f51e09db219 (diff)
downloadnetworkx-a8b907df38d9d36f77d75c65d9e6a5518b849c6b.tar.gz
Fix bug in selfloop drawing in draw_networkx_edges (#5048)
* Add test case for bug. * Make sure selfloops are included in orig edgelist b4 drawing. This fixes the bug where selfloops were drawn no matter what, even if they were explicitly excluded via the edgelist parameter.
-rw-r--r--networkx/drawing/nx_pylab.py8
-rw-r--r--networkx/drawing/tests/test_pylab.py10
2 files changed, 14 insertions, 4 deletions
diff --git a/networkx/drawing/nx_pylab.py b/networkx/drawing/nx_pylab.py
index e66d0c3a..bbffab22 100644
--- a/networkx/drawing/nx_pylab.py
+++ b/networkx/drawing/nx_pylab.py
@@ -852,10 +852,10 @@ def draw_networkx_edges(
# Draw the edges
if use_linecollection:
edge_viz_obj = _draw_networkx_edges_line_collection()
- # Make sure selfloop edges are also drawn.
- edgelist = list(nx.selfloop_edges(G))
- if edgelist:
- edge_pos = np.asarray([(pos[e[0]], pos[e[1]]) for e in edgelist])
+ # Make sure selfloop edges are also drawn
+ selfloops_to_draw = [loop for loop in nx.selfloop_edges(G) if loop in edgelist]
+ if selfloops_to_draw:
+ edge_pos = np.asarray([(pos[e[0]], pos[e[1]]) for e in selfloops_to_draw])
arrowstyle = "-"
_draw_networkx_edges_fancy_arrow_patch()
else:
diff --git a/networkx/drawing/tests/test_pylab.py b/networkx/drawing/tests/test_pylab.py
index d533cebd..cb79708b 100644
--- a/networkx/drawing/tests/test_pylab.py
+++ b/networkx/drawing/tests/test_pylab.py
@@ -423,3 +423,13 @@ def test_draw_networkx_arrows_default_directed(drawing_func):
)
assert ax.patches
plt.delaxes(ax)
+
+
+def test_edgelist_kwarg_not_ignored():
+ # See gh-4994
+ G = nx.path_graph(3)
+ G.add_edge(0, 0)
+ fig, ax = plt.subplots()
+ nx.draw(G, edgelist=[(0, 1), (1, 2)], ax=ax) # Exclude self-loop from edgelist
+ assert not ax.patches
+ plt.delaxes(ax)