matplotlib.pyplot.imshow( X, cmap=None, norm=None, aspect=None, interpolation=None, alpha=None, vmin=None, vmax=None, origin=None, extent=None, shape=None, filternorm=1, filterrad=4.0, imlim=None, resample=None, url=None, hold=None, data=None, **kwargs)
X : 類數組, shape (n, m) or (n, m, 3) or (n, m, 4)html
在當前的座標系中顯示圖像X,X多是數組或者PIL圖像,若是是數組:api
MxN – values to be mapped (float or int) MxNx3 – RGB (float or uint8) MxNx4 – RGBA (float or uint8)數組
MxN的每一個數都會經過Normalize和Colormap映射到圖像app
若是是整數範圍在[0,255],若是是浮點數範圍在[0,1]dom
cmap : Colormap, 可選,默認使用rc image.cmap配置的,若是X是三維數組,忽略ui
aspect : [‘auto’ | ‘equal’ | scalar], 可選,默認 rc image.aspect配置值url
若是是‘auto’, changes the 圖像長寬比將和座標系匹配scala
若是是‘equal’, 而且extent爲None,座標系長寬比將匹配圖像,若是extent不爲None,座標系的長寬比將匹配extentrest
interpolation : string, 可選,差值方式,默認rc image.interpolation配置值code
能夠搜索一下"圖像差值"可能更加有助於理解這個參數
‘none’, ‘nearest’, ‘bilinear’, ‘bicubic’, ‘spline16’, ‘spline36’, ‘hanning’, ‘hamming’, ‘hermite’, ‘kaiser’, ‘quadric’, ‘catrom’, ‘gaussian’, ‘bessel’, ‘mitchell’, ‘sinc’, ‘lanczos’之一
norm : Normalize, 可選,顏色映射使用
vmin, vmax : scalar, 可選,若是設置Normalize,忽略
alpha : scalar, 可選,透明度[0,1],若是X使用的是RGBA,忽略
origin : [‘upper’ | ‘lower’], 可選,默認rc image.origin配置值
座標(0,0)在左下角仍是左上角
extent : scalars (left, right, bottom, top), 可選
數據座標,圖像範圍(左下角座標和右上角座標)
shape : scalars (columns, rows),可選,圖像原生緩衝區
filternorm : scalar, 可選, 默認: 1
給圖形大小調整過來使用的參數當filternorm = 1, 將過濾整數值和糾正取整(rounding)錯誤。不會過濾浮點數。
filterrad : scalar, 可選, 默認: 4.0
爲使用半徑參數的filter提供,例如:interpolation是‘sinc’, ‘lanczos’ or ‘blackman’中的一個。
image : AxesImage
imshow可能很差理解,由於涉及到不少圖形處理相關的知識。咱們先從簡單的例子說一下,例如咱們使用MxN數據。爲何事2維的呢?由於平面是2維的。MxN中的每個數據都會經過Normalize和Colormap映射出來放到一個位置上,注意MxN不是座標數據而是像素數據,一個數據對應一個像素位置。
像素數據不能填充指定尺寸的圖形怎麼辦?interpolation就有做用了,選擇一個圖形插值方式,沒有數據的就是用指定的插值方式填充。
# -*- coding:utf-8 -*- import matplotlib.pyplot as plt import numpy as np # extent = (-3,1,-3,1) fig = plt.figure(frameon=False) data = np.add.outer(range(8), range(8)) % 2 print data # plt.imshow(data, cmap=plt.cm.gray, interpolation='nearest',extent=extent) # plt.imshow(data, cmap=plt.cm.gray, interpolation='bilinear',extent=extent) # plt.imshow(data, cmap=plt.cm.gray, interpolation='bicubic',extent=extent) # plt.imshow(data, cmap=plt.cm.gray, interpolation='nearest') plt.imshow(data, cmap=plt.cm.gray, interpolation='nearest',origin="lower") plt.savefig("gray.png") plt.show()
[[0 1 0 1 0 1 0 1] [1 0 1 0 1 0 1 0] [0 1 0 1 0 1 0 1] [1 0 1 0 1 0 1 0] [0 1 0 1 0 1 0 1] [1 0 1 0 1 0 1 0] [0 1 0 1 0 1 0 1] [1 0 1 0 1 0 1 0]]
輸出大概是這個樣子滴:
從圖像和數據的對比咱們能夠比較容易看出,一個數據對應着一個點。座標周圍沒有數據的就使用圖像插值的方式填充。
再來一個改進版的:
# -*- coding:utf-8 -*- import matplotlib.pyplot as plt import numpy as np dx, dy = 0.05, 0.05 x = np.arange(-3.0, 3.0, dx) y = np.arange(-3.0, 3.0, dy) extent = np.min(x), np.max(x), np.min(y), np.max(y) # extent = (-3,1,-3,1) fig = plt.figure(frameon=False) dataBase = np.add.outer(range(8), range(8)) % 2 print dataBase plt.imshow(dataBase, cmap=plt.cm.gray, interpolation='nearest',extent=extent) # plt.imshow(dataBase, cmap=plt.cm.gray, interpolation='bilinear',extent=extent) # plt.imshow(dataBase, cmap=plt.cm.gray, interpolation='bicubic',extent=extent) # plt.imshow(dataBase, cmap=plt.cm.gray, interpolation='nearest') dataForeign = np.random.rand(8,8)*3 print dataForeign # plt.imshow(dataForeign, cmap=plt.cm.viridis, alpha=0.9, interpolation='bilinear',extent=extent) plt.imshow(dataForeign, cmap=plt.cm.viridis, alpha=0.9, interpolation='bicubic',extent=extent) plt.savefig("viridis.png") plt.show()
再來一個例子看一看:
# -*- coding:utf-8 -*- import matplotlib.cm as cm import matplotlib.pyplot as plt from matplotlib.patches import Circle, PathPatch from matplotlib.path import Path import numpy as np # Fixing random state for reproducibility np.random.seed(19680801) r = np.random.rand(50) t = np.random.rand(50) * np.pi * 2.0 x = r * np.cos(t) y = r * np.sin(t) fig, ax = plt.subplots(figsize=(6, 6)) # circle = Circle((0, 0), 1, facecolor='none',edgecolor=(0, 0.8, 0.8), linewidth=3, alpha=0.5) circle = Circle((0, 0), 1, facecolor='none',edgecolor='b', linewidth=3) ax.add_patch(circle) ax.axis("off") ax.axis([-2,2,-2,2]) interpolation = ['none', 'nearest', 'bilinear', 'bicubic', 'spline16', 'spline36', 'hanning', 'hamming', 'hermite', 'kaiser', 'quadric', 'catrom', 'gaussian', 'bessel', 'mitchell', 'sinc', 'lanczos'] # im = plt.imshow(np.random.random((100, 100)),origin='lower', cmap=cm.winter,interpolation='spline36',extent=([-1, 1, -1, 1])) # im = plt.imshow(np.random.random((100, 100)),origin='lower', cmap=cm.winter,interpolation='lanczos',extent=([-1, 1, -1, 1])) # im = plt.imshow(np.random.random((100, 100)),origin='lower', cmap=cm.winter,interpolation='sinc',extent=([-1, 1, -1, 1])) # im = plt.imshow(np.random.random((100, 100)),origin='lower', cmap=cm.winter,interpolation='mitchell',extent=([-1, 1, -1, 1])) # im = plt.imshow(np.random.random((100, 100)),origin='lower', cmap=cm.winter,interpolation='bessel',extent=([-1, 1, -1, 1])) # im = plt.imshow(np.random.random((100, 100)),origin='lower', cmap=cm.winter,interpolation='gaussian',extent=([-1, 1, -1, 1])) # im = plt.imshow(np.random.random((100, 100)),origin='lower', cmap=cm.winter,interpolation='catrom',extent=([-1, 1, -1, 1])) im = plt.imshow(np.random.random((100, 100)),origin='lower', cmap="CMRmap",interpolation='catrom',extent=([-1, 1, -1, 1])) im.set_clip_path(circle) plt.plot(x, y, 'o', color=(0.9, 0.9, 1.0), alpha=0.8) plt.savefig("circle.png") plt.show()
從上面的例子咱們能夠看出imshow在畫一下背景和處理蒙版效果仍是很是好的,固然imshow還有其餘的功能,好比加載顯示圖像等。