Печатание координат курсора на рисунке в виде Matplotib в блокноте Jupyter: плавный путь - PullRequest
0 голосов
/ 29 января 2019

Я хочу отобразить координаты моего курсора на изображении, отображаемом с помощью matplotlib в блокноте Jupyter.

Я использую магию %matplotlib notebook согласно этому вопросу .

Хотя это дает хороший ответ для статической фигуры, это приводит к огромному количеству мерцаний и ошибок (иногда эта фигура не отображается) при использовании в интерактивной среде, где фигура постоянно перерисовывается во время нарезки.Например,

%matplotlib notebook
from ipywidgets import interact
import matplotlib.pyplot as plt
import numpy as np

vol = np.random.uniform(size=(16, 16, 16))

@interact(z=(0, 15))
def show(z):
    plt.imshow(vol[z])
    plt.show()

Без %matplotlib notebook фигура обновляется без какого-либо мерцания, но не показывает координаты курсора.С магией отображаются координаты, но мерцание невыносимо.

Есть ли способ получить координаты пикселей без мерцания в этой простой ситуации?

1 Ответ

0 голосов
/ 29 января 2019

Проблема заключается в использовании plt.show(), который заменит фигуру.Вместо этого вы, вероятно, хотите обновить существующую фигуру.

%matplotlib notebook
from ipywidgets import interact
import matplotlib.pyplot as plt
import numpy as np

vol = np.random.uniform(size=(16, 16, 16))

fig, ax = plt.subplots()
im = ax.imshow(vol[0])

@interact(z=(0, 15))
def show(z):
    im.set_array(vol[z])
    im.set_clim(vol[z].min(), vol[z].max())
    fig.canvas.draw_idle()

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

%matplotlib notebook
from ipywidgets import interact
import matplotlib.pyplot as plt
import numpy as np

vol = np.random.uniform(size=(16, 16, 16))

fig, ax = plt.subplots()
im = ax.imshow(vol[0], vmin=vol.min(), vmax=vol.max())
fig.colorbar(im)

@interact(z=(0, 15))
def show(z):
    im.set_array(vol[z])
    fig.canvas.draw_idle()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...