【问题标题】:How to limit the range of the x-axis with imshow()?如何使用 imshow() 限制 x 轴的范围?
【发布时间】:2012-12-04 13:46:14
【问题描述】:

我有以下数据

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() 绘制的

结果如下所示:

这是我的代码:

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],但是轴然后只是移动了。结果是这样的:

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    设置 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)
    

    【讨论】:

    • 可能你忘了提colormap(cm) from matplotlib import cm谢谢
    猜你喜欢
    • 2022-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多