我想在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
的情况下,图形正在更新,没有任何闪烁,但是没有显示光标坐标。使用魔术可以显示坐标,但是闪烁难以忍受。
在这种简单情况下,是否有一种方法可以使像素坐标不闪烁?
答案 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()