How to limit the range of the x-axis with imshow()?
matplotlib, python
Solution
Setting the extent for imshow is good, since this defines the range of your data. It does not specify the range of what is shown, because this is a property of the axes and can be set by simply adding ax1.set_xlim(-4,4)
So:
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)
Problem
I have the following data ``` 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 ``` that I plot with `imshow()` The result looks like this: Here is my code: ``` 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) ``` My problem is: How to show just the results from -4 to 4? Intuitively I thought of changing `extent=[-4.00,4.00,0.,3.00]`, but the axis is then just shifted. The result is like this: