gpt4 book ai didi

matplotlib - iPython 笔记本 : How to prevent from outputting image on imshow()?

转载 作者:行者123 更新时间:2023-12-04 12:24:51 26 4
gpt4 key购买 nike

我经常将 iPython notebook 与 matplotlib 一起使用,虽然在很多情况下我很高兴它会在我调用 imshow() 时自动显示图像,但有时我想防止这种行为。

具体来说,我正在遍历一个非常大的数组,并在 matplotlib 中为每个应该保存到磁盘的元素生成一个图形。作为该图形创建的一部分,我必须调用 imshow() 将现有图像(在我的情况下是 map 的屏幕截图)绘制到轴上,以便稍后在其上绘制其他 Material 。每当我在过程中调用 imshow 时,最终数字都会在 iPython 笔记本中内联显示,我该如何防止?

我的代码看起来像这样:

import matplotlib as plt
fig = plt.pyplot.figure(figsize=(20,20))
im2 = plt.pyplot.imread('/some/dir/fancy-map.png')

# Magic to calculate points, x_min etc.

fig.clf()
ax = fig.gca(xlim=(x_min, x_max), ylim=(y_min, y_max))
ax.imshow(im2, extent=(4, 4.5746, 42.5448, 43.3791), aspect=1.5)
raster = ax.imshow(points, vmin = 0, vmax=maxval, extent=(x_min, x_max, y_min, y_max), aspect=1.5, origin='lower')
fig.colorbar(raster)
ax.set_title('coordinates plot')

fig.savefig("fancy-annotated-map.png", bbox_inches=0)

最佳答案

尝试将其移动到函数中,并在函数开始时执行 pylab.ioff()最后返回 pylab.ion() :

# Obvs add arguments so you can pass in your data and plot choices.
def make_img():
pylab.ioff()

import matplotlib as plt
fig = plt.pyplot.figure(figsize=(20,20))
im2 = plt.pyplot.imread('/some/dir/fancy-map.png')

# Magic to calculate points, x_min etc.

fig.clf()
ax = fig.gca(xlim=(x_min, x_max), ylim=(y_min, y_max))
ax.imshow(im2, extent=(4, 4.5746, 42.5448, 43.3791), aspect=1.5)
raster = ax.imshow(points,
vmin = 0,
vmax=maxval,
extent=(x_min, x_max, y_min, y_max),
aspect=1.5,
origin='lower')
fig.colorbar(raster)
ax.set_title('coordinates plot')
fig.savefig("fancy-annotated-map.png", bbox_inches=0)

pylab.ion()
  • 这假设您仅在 IPython 中使用该函数,否则 pylab总是进口的。最好包装一个 try ... except围绕它,以便该功能可以在其他地方使用。
  • 看看the template for making your own IPython Magic functions ( %%% 函数调用,如 %cpaste )。一个很好的方法是创造你自己的魔法,比如 %imnoshow或其他东西,只包含调用 imshow 的部分,以便您在线处理 imshow输出而不必看到输出。由于您的问题不涉及一般的绘图界面,而是涉及这个特定的绘图界面,因此我不会尝试在此处实现这一点,但希望上面的链接应该足以让您在需要时可以实现一些东西。
  • 另一种方法是按照说明设置您自己的 IPython configuration environment ,包括一些特别的 .py包含您自己的导入和帮助程序类定义等的文件。然后将您自己的特殊绘图函数放在那里,以便它们在启动时加载并在 IPython 的全局范围内可用。我强烈推荐这个有几个原因:(a) 你实际上可以为你自己的辅助函数编写单元测试,如果你愿意,甚至可以在每次启动 IPython 时轻松测试! (b) 这使您可以更轻松地进行版本控制并封装您经常需要的辅助函数的逻辑。 (c) 您可以从“就在那里”函数中受益,而无需将其设置为魔法函数或稍后导入。
  • 关于matplotlib - iPython 笔记本 : How to prevent from outputting image on imshow()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19982807/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com