如何在Python的imshow绘图中添加轴标签并调整刻度范围?
关于Matplotlib绘制二元函数的轴标签与刻度范围问题解答
嘿,我来帮你搞定这两个绘图问题!你的代码用的是pylab(Matplotlib的便捷接口),但操作轴标签和刻度得找对对象,我给你一步步说:
一、添加轴标签
你之前用im.ylabel()报错,是因为imshow()返回的是AxesImage对象,它管的是图像本身,不是坐标轴。要设置轴标签,直接用pylab的xlabel()和ylabel()函数就行,或者获取坐标轴对象来操作,两种方式都可以:
方式1:直接调用pylab的标签函数
在你的代码里,show()之前加上这两行:
xlabel('var1') # 设置x轴标签 ylabel('var2') # 设置y轴标签
方式2:获取当前坐标轴对象操作(更灵活)
如果需要更精细控制,可以先拿到当前轴,再设置标签:
from pylab import gca ax = gca() # 获取当前坐标轴对象 ax.set_xlabel('x') ax.set_ylabel('y')
二、把刻度范围改成-3到3
imshow默认显示的是像素的索引(你的x、y各有60个点,所以刻度是0到60),要让刻度对应实际的x、y范围,只需要在imshow()里加上extent参数,指定数据的实际边界:
im = imshow(Z, cmap=cm.RdBu, extent=[-3, 3, -3, 3])
extent的格式是[x最小值, x最大值, y最小值, y最大值],刚好对应你设置的x、y范围。
完整修改后的代码
把两个修改整合后,代码是这样的:
from numpy import exp, arange from pylab import meshgrid, cm, imshow, contour, clabel, colorbar, axis, title, show, xlabel, ylabel # 定义要绘制的函数 def z_func(x,y): return (x+y**2) x = arange(-3.0, 3.0, 0.1) y = arange(-3.0, 3.0, 0.1) X,Y = meshgrid(x, y) # 创建网格点 Z = z_func(X, Y) # 在网格上计算函数值 # 绘制函数,指定extent来对应实际坐标范围 im = imshow(Z, cmap=cm.RdBu, extent=[-3, 3, -3, 3]) colorbar(im) # 添加右侧色条 # 设置轴标签 xlabel('x') ylabel('y') show()
这样运行后,你就能看到带正确标签和刻度范围的图啦~
内容的提问来源于stack exchange,提问作者Qaswed
相关产品推荐
相关产品推荐

