在Jupyter笔记本中以Matplotib图形打印光标坐标:平滑的方法

时间:2019-01-29 13:20:11

标签: python matplotlib jupyter-notebook

我想在Jupyter笔记本中用matplotlib显示的图像中显示光标的坐标。

我正在按照this question使用%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 :(得分:1)

问题是使用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()