В общем, вы ищете 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()
![введите описание изображения здесь](https://i.stack.imgur.com/bIK2B.png)
В случае примера, который вы привели:
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()
![введите описание изображения здесь](https://i.stack.imgur.com/puWnW.png)
Однако в этом случае вы также можете рассмотреть возможность использования 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]
.
person
Joe Kington
schedule
30.12.2015
extent
кварга дляimshow
. - person Joe Kington   schedule 30.12.2015contourf(x, y, Z)
, которые являются заполненными контурами. - person ssm   schedule 02.02.2016