一般而言,您正在尋找extent
kwarg至imshow
。
作爲一個簡單的例子:
import numpy as np
import matplotlib.pyplot as plt
data = np.random.random((10, 10))
fig, ax = plt.subplots()
ax.imshow(data, extent=[10, 30, np.pi, -2*np.pi])
plt.show()
在你給的例子的情況下:
import numpy as np
import matplotlib.pyplot as plt
a = 1
theta = np.linspace(0, 2*np.pi, 100)
# We could replace the next three lines with:
# y, x = np.mgrid[-3*a:3*a:1000j, -3*a:3*a:1000j]
x = np.linspace(-3*a, 3*a, 1000)
y = np.linspace(-3*a, 3*a, 1000)
x, y = np.meshgrid(x, y)
# Now let's make something similar to your V for this example..
r = np.hypot(x, y)
V = np.cos(3*np.arctan2(y, x)) + np.sin(r) + np.cos(x)*1j * np.cos(r)
def plot(ax, data):
ax.plot(a*np.cos(theta), a*np.sin(theta), color='black')
im = ax.imshow(data, extent=[x.min(), x.max(), y.max(), y.min()])
fig.colorbar(im, ax=ax, shrink=0.5)
fig, (ax1, ax2) = plt.subplots(ncols=2)
ax1.set(title='Real Portion')
plot(ax1, V.real)
ax2.set(title='Imaginary Portion')
plot(ax2, V.imag)
plt.show()
不過,你也可以考慮使用pcolormesh
在這種情況下。例如,我們可以改變plot
功能:
def plot(ax, data):
ax.plot(a*np.cos(theta), a*np.sin(theta), color='black')
im = ax.pcolormesh(x, y, data)
ax.set(aspect=1)
fig.colorbar(im, ax=ax, shrink=0.5)
的主要區別是:
imshow
可以插值,而pcolormesh
給矢量輸出,不能插值(也就是它繪製了大量的矩形而不是圖像)。
pcolormesh
速度稍慢,所以對於大圖像,imshow
是更好的選擇。
imshow
和pcolormesh
對區域的處理略有不同。 imshow
是「以細胞爲中心」,而pcolormesh
是「以網格爲中心」。這是一個半像素的差異,所以你可以在這種情況下忽略它。
imshow
將設置繪圖的方面爲1,以使x方向上的一個單位與y方向上的一個單位具有相同的尺寸。它也會翻轉y軸,默認情況下。其他
一個注意:如果你不希望有y軸翻轉,或者調用ax.invert_yaxis()
或使用origin='lower'
和extent=[xmin, xmax, ymin, ymax]
。
你有沒有考慮過使用xlim和ylim命令?我認爲它應該可以幫助你解決第一個問題 –
這是行不通的。如果我使用xlim(-3,3),ylim(-3,3),那麼它只會放大到左上角並顯示V [0:3,0:3] – Physicist
是V圖像嗎?它看起來像x和y座標描述圖像的行和列 –