如何用imshow()限制x轴的范围?

时间:2012-12-04 13:46:14

标签: python matplotlib

我有以下数据

1.105   0.919   0.842   0.715   0.704   0.752   0.827   1.049   0.584   
0.998   0.931   0.816   0.787   0.803   0.856   0.782   0.872   0.710   
1.268   1.189   1.036   0.984   0.847   0.948   1.083   0.864   0.792

我用imshow()

绘图

结果如下: enter image description here

这是我的代码:

from numpy import*
import matplotlib.cm as cm
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable

shape=(3,9)
velocity=zeros(shape)


fig = plt.figure(figsize=(16, 12), dpi=100)
ax1 = fig.add_subplot(111,aspect='equal')
#   ax1.set_yticks([int(100*j) for j in range(0,4)])
ax1.set_yticks([int(j) for j in range(0,4)])
ax1.set_xticks([int(j) for j in range(-4,5)])
for label in ax1.get_xticklabels() + ax1.get_yticklabels():
    label.set_fontsize(15)
for tick in ax1.get_xticklines() + ax1.get_yticklines():
    tick.set_markeredgewidth(2)
    tick.set_markersize(6)
ax1.set_aspect("equal") 
velocity=loadtxt("fieldvelocitybot-300-100-100_400.dat")

im = plt.imshow(velocity, cmap=cm.jet, interpolation='nearest',origin='lower',vmin=0,vmax=1.7, extent=[-4.50,4.50,0.,3.00])

divider = make_axes_locatable(ax1)
cax = divider.append_axes("right", size="2.5%", pad=0.3)
cb=plt.colorbar(im,cax=cax)
cb.set_label('Speed [$m/s$]')
plt.savefig("speed_400.png")
plt.close(fig)

我的问题是:如何只显示-4到4的结果?直觉上我想到了改变extent=[-4.00,4.00,0.,3.00],但是轴只是移动了。结果是这样的: enter image description here

1 个答案:

答案 0 :(得分:4)

设置imshow的范围很好,因为它定义了数据的范围。它没有指定显示的范围,因为这是轴的属性,可以通过简单地添加ax1.set_xlim(-4,4)来设置

所以:

from mpl_toolkits.axes_grid1 import make_axes_locatable
import numpy as np
import matplotlib.pyplot as plt

velocity=np.random.rand(3,9)

fig, ax1 = plt.subplots(1,1,figsize=(16, 12), dpi=100, subplot_kw={'aspect': 'equal'})

ax1.set_yticks([int(j) for j in range(0,4)])
ax1.set_xticks([int(j) for j in range(-4,5)])

for label in ax1.get_xticklabels() + ax1.get_yticklabels():
    label.set_fontsize(15)
for tick in ax1.get_xticklines() + ax1.get_yticklines():
    tick.set_markeredgewidth(2)
    tick.set_markersize(6)

im = ax1.imshow(velocity, cmap=cm.jet,     interpolation='nearest',origin='lower',vmin=0,vmax=1.7, extent=[-4.50,4.50,0,3])
ax1.set_xlim(-4,4)

divider = make_axes_locatable(ax1)
cax = divider.append_axes("right", size="2.5%", pad=0.3)
cb=plt.colorbar(im,cax=cax)
cb.set_label('Speed [$m/s$]')

plt.savefig("speed_400.png")
plt.close(fig)

enter image description here