matplotlib: изменить активные оси - PullRequest
0 голосов
/ 04 октября 2018

У меня есть несколько объектов, которые визуализируют разные вещи.Всем им передается ссылка на один экземпляр Figure и создаются их собственные объекты осей (одновременно активен только один из них)

Код для демонстрации будет:

import numpy as np
import matplotlib.pyplot as plt
# the visualization objects are jupyter widgets in production code
%matplotlib widget
plt.ioff()

def update_fig(f):
    f.canvas.draw()
    f.canvas.flush_events()

f = plt.figure()

# first visualizer is created and plots into the figure
ax1 = f.add_subplot(1,1,1, label="visualizer_1")
img1 = np.random.randint(0, 256, (20, 20, 3))
vis1 = ax1.imshow(img1)
update_fig(f)

# second visualizer is created and plots into the figure
ax2 = f.add_subplot(1,1,1, label="visualizer_2")
vis2 = ax2.plot(np.linspace(0, 5), 2 * np.linspace(0, 5))
update_fig(f)

Как тогда я могу переключить, какие оси показывать на графике?Уже пытался plt.sca(ax1) вернуться к первой визуализации, но это не сработало.

Конечно, я мог бы использовать разные цифры для каждого объекта визуализации, но, поскольку у меня их много, я бы предпочел этого избежать.

1 Ответ

0 голосов
/ 04 октября 2018

Вы можете использовать Axes.set_visible([True|False]), чтобы показать или скрыть определенную ось в любое время.

f = plt.figure()

# first visualizer is created and plots into the figure
ax1 = f.add_subplot(1,1,1, label="visualizer_1")
img1 = np.random.randint(0, 256, (20, 20, 3))
vis1 = ax1.imshow(img1)
update_fig(f)

# second visualizer is created and plots into the figure
ax1.set_visible(False)
ax2 = f.add_subplot(1,1,1, label="visualizer_2")
vis2 = ax2.plot(np.linspace(0, 5), 2 * np.linspace(0, 5))
update_fig(f)

ax2.set_visible(False) # hide ax2
ax1.set_visible(True) # show ax1 again.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...