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()
我用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:
我的问题是:如何显示从-4到4的结果?直觉上,我想到的是变化的范围=[-4.00,4.00,0.,3.00],但坐标轴只是平移了。结果是这样的:
1 个解决方案
#1
4
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)
设置imshow的范围很好,因为这定义了数据的范围。它没有指定显示的范围,因为这是坐标轴的属性,可以通过简单地添加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)
#1
4
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)
设置imshow的范围很好,因为这定义了数据的范围。它没有指定显示的范围,因为这是坐标轴的属性,可以通过简单地添加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)