Оси исчезают после рисования графика Networkx на другом участке - PullRequest
2 голосов
/ 07 июня 2019

Я пытаюсь получить визуализацию графика на одном участке и линейный график некоторых значений на другом участке. Однако после того, как я нарисовал график на первом вспомогательном участке, оси на другом вспомогательном участке исчезают (хотя я не разрешал использовать общие оси). И я не могу их вернуть.

import networkx as nx
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(211)
ax2 = fig.add_subplot(212)
G = nx.graph_atlas(1)
nx.draw(G, ax=ax1)
plt.show()

Результаты: enter image description here Пока без nx.draw() это: enter image description here

Я пытался позвонить ax2.get_yaxis().set_visible(True) после nx.draw(G, ax=ax1), но это не имеет никакого эффекта.

Q1: Как восстановить оси на ax2?
Q2: Как это возможно, что nx.draw(G,ax=ax1) влияет на ax2?

1 Ответ

1 голос
/ 07 июня 2019

Проблема в баге networkx. Вместо того, чтобы отключать метки для осей ax, он вызывает plt.tick_params(...). Это повлияет на текущие активные оси pyplot, которые в вашем случае равны ax2.

Таким образом, одним из вариантов является замена plt.tick_params( на ax.tick_params( в источнике в строках 417 и 692 и 806 и 959 из networkx/networkx/drawing/nx_pylab.py.

Я только что создал PR для этого в https://github.com/networkx/networkx/pull/3476


Другой вариант - убедиться, что текущие оси пиплота - это та, где находится ваш график, например через plt.sca(ax1),

import networkx as nx
print(nx.__version__)
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(211)
ax2 = fig.add_subplot(212)
G = nx.graph_atlas(1)
plt.sca(ax1)
nx.draw(G, ax=ax1)
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...