利用matplotlib中imshow()函数绘图

本文介绍如何使用Python的Matplotlib库进行2D绘图。包括库的导入、Figure与Subplot的基本操作,以及如何绘制z=sqrt(x^2+y^2)的二维函数输出图像。演示了不同颜色映射的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

matplotlib 是python最著名的2D绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。通过简单的绘图语句,就可以绘制出高质量的图了。

这里我们就主要讲一下inshow()函数的使用吧。

一、引入matplotlib函数库

如果你使用的是windows平台,大家可以直接下载对应版本的matplotlib库的exe文件安装即可。

使用下面的命令引入matplotlib的pyplot模块:

import matplotlib.pyplot as plt


为方便起见,这样我们就可以用plt来代替matplotlib.pyplot使用了。


二、Figure和Subplot

matplotlib的图像都位于Figure对象中,实际上就是创建了一个空的图像窗口。可以用plt.figure创建一个新的Figure。

fig = plt.figure()


不能通过空Figure绘图,必须用add_subplot()创建一个或多个子sunplot绘图区才能绘图。

ax = fig.add_subplot(221)

意思是:绘制2×2两行两列共4个subplot图像,当前选中第一个。编号从1开始。

得到如下的图像:



三、绘制z = sqrt(x^2+y^2) 的二维函数输出图像

(1)准备数据

我们采用二维数组产生两个二维矩阵,对应于所有的(x,y)对。

要使用数组,我们使用NumPy 模块。

import numpy as np


points = np.arange(-5,5,0.01)   #产生1000个-5到5等间隔的点


xs,ys = np.meshgrid(points,points)   #np.meshgrid()接受两个一维数组产生两个二维矩阵((x,y)对)。


z = np.sqrt(xs**2+ys**2)   #计算z = sqrt(x^2+y^2)的值


(2)绘图

ax = fig.add_subplot(221)   #第一个子图

ax.imshow(z)   #默认配置

ax = fig.add_subplot(222)   #第一个子图

ax.imshow(z,cmap = plt.cm.gray)   #第二个子图,使用自定义的colormap(灰度图)

ax = fig.add_subplot(223)   #第一个子图

ax.imshow(z,cmap=plt.cm.cool)   #第二个子图,使用自定义的colormap

ax = fig.add_subplot(224)   #第一个子图

ax.imshow(z,cmap=plt.cm.hot)   #第二个子图,使用自定义的colormap

plt.show()   #显示图像


于是,漂亮的图像就出来了。

可是,细心的你发现,图的坐标怎么是0-1000呢?是这样的,我们给imshow传入z矩阵是1000×1000的,z的索引其实就是图像的坐标,而其值才是通过图的颜色表现出来的。



### 解决 Matplotlib `imshow` 函数不显示图像的问题 当遇到 Matplotlib 的 `imshow` 函数无法正常显示图像的情况时,通常是因为缺少必要的绘图展示命令或是环境配置不当。具体措施如下: 对于 Python Shell IDLE 环境而言,由于其默认未开启交互模式,因此需要手动激活此功能以便能够实时查看绘制的结果[^1]。 而在 PyCharm 社区版中,除了确保调用了 `plt.show()` 方法外,还需确认 IDE 设置是否影响到了图形窗口的弹出行为;如果发现没有名为 "Python Scientific" 的设置项,则不必担心,因为这并不是唯一途径[^4]。 另外,在其他开发环境下(比如标准命令行终端),只要简单地追加 `plt.show()` 即可解决问题[^5]。 值得注意的是,为了使图像正确呈现,特别是从 OpenCV 加载的情况下,应当调整颜色通道顺序以匹配 Matplotlib 所期望的形式——即将 BGR 调整为 RGB[^2]。 最后,若希望获得更平滑的视觉效果,可以通过修改参数实现更高的渲染质量[^3]。 ```python import numpy as np import matplotlib.pyplot as plt from PIL import Image # 假设这是你要加载并处理的一张图片路径 image_path = 'path_to_your_image_file' img = Image.open(image_path) # 将PIL.Image对象转化为numpy数组形式 np_img = np.array(img) # 如果是从OpenCV读入则需转换色彩空间 if isinstance(np_img, type(cv2.imread(''))): np_img = cv2.cvtColor(np_img,cv2.COLOR_BGR2RGB) plt.figure() plt.imshow(np_img) plt.axis('off') # 关闭坐标轴 plt.show() # 对于想要提高画质的需求者来说,可以尝试下面的方法之一: # 使用 interpolation 参数指定插值方式来增强清晰度 plt.imshow(np_img, interpolation='bicubic') plt.show() ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值