Python=に数の多い配列があり、それをラスターイメージとして画面に表示したいのですが、これを行う最も簡単な方法は何ですか?特に派手であるか、Niceインターフェイスがある場合、必要なのは、グレースケールラスターイメージとして配列の内容を表示することだけです。
私はIDLコードの一部をNumPyでPython=に移行しようとしています。基本的に、IDLのtv
およびtvscl
コマンドの代わりを探しています。
必要に応じて、 matplotlibのimshow
または glumpy がおそらく最良のオプションです。
Matplotlibは無限に柔軟性がありますが、速度は遅くなります(matplotlibのアニメーションは、すべてを正しく行っていても、驚くほどリソースを大量に消費する可能性があります)。しかし、あなたはあなたの処分で本当に素晴らしい、フル機能のプロッティングライブラリを持っているでしょう。
Glumpyは、2D numpy配列の迅速なopenGLベースの表示とアニメーションに完全に適していますが、その機能ははるかに制限されています。ただし、一連の画像をアニメーション化したり、データをリアルタイムで表示したりする必要がある場合は、matplotlibよりもはるかに優れたオプションです。
Matplotlibの使用(pylabの代わりにpyplot APIを使用):
import matplotlib.pyplot as plt
import numpy as np
# Generate some data...
x, y = np.meshgrid(np.linspace(-2,2,200), np.linspace(-2,2,200))
x, y = x - x.mean(), y - y.mean()
z = x * np.exp(-x**2 - y**2)
# Plot the grid
plt.imshow(z)
plt.gray()
plt.show()
不機嫌な使い方:
import glumpy
import numpy as np
# Generate some data...
x, y = np.meshgrid(np.linspace(-2,2,200), np.linspace(-2,2,200))
x, y = x - x.mean(), y - y.mean()
z = x * np.exp(-x**2 - y**2)
window = glumpy.Window(512, 512)
im = glumpy.Image(z.astype(np.float32), cmap=glumpy.colormap.Grey)
@window.event
def on_draw():
im.blit(0, 0, window.width, window.height)
window.mainloop()
Pylabインタラクティブモードでipythonを使用すると、次のことができます。
$ ipython pylab
In [1]: imshow(your_array)
pylabモードではないか:
$ ipython
In [1]: from pylab import *
In [2]: imshow(your_array)
In [3]: pylab.show()
またはpylab名前空間なしで:
$ ipython
In [1]: import matplotlib.pyplot as pyplot
In [2]: pyplot.imshow(your_array)
In [3]: pyplot.show()
簡単な追加:matplotlibで表示する場合、画像を「ラスター」で表示する、つまり平滑化せずにピクセル化する場合は、imshowの呼び出しに内挿オプション 'nearest'を含める必要があります。