
import matplotlib.pyplot as pltimport numpy as npplt.style.use('_mpl-gallery-nogrid')# make data with uneven sampling in xx = [-3, -2, -1.6, -1.2, -.8, -.5, -.2, .1, .3, .5, .8, 1.1, 1.5, 1.9, 2.3, 3]X, Y = np.meshgrid(x, np.linspace(-3, 3, 128))Z = (1 - X/2 + X**5 + Y**3) * np.exp(-X**2 - Y**2)# plotfig, ax = plt.subplots()ax.pcolormesh(X, Y, Z, vmin=-0.5, vmax=1.0)plt.show()
# 1. 导入库import matplotlib.pyplot as pltimport numpy as np# 2. 设置内置绘图样式plt.style.use('_mpl-gallery-nogrid')# 3. 生成数据x = [-3, -2, -1.6, -1.2, -.8, -.5, -.2, .1, .3, .5, .8, 1.1, 1.5, 1.9, 2.3, 3]# x 是一个列表,包含 16 个点。# 这些点在 x 轴上的采样不均匀(例如从 -3 到 -2 间隔 1,之后间隔逐渐变小,再变大)。X, Y = np.meshgrid(x, np.linspace(-3, 3, 128))# np.linspace(-3, 3, 128) 在 y 方向生成 128 个均匀分布的点,范围从 -3 到 3。# np.meshgrid 根据 x(不均匀)和 y(均匀)创建二维网格:# X 的每一行都是 x 列表的重复,所以 X 的形状是 (128, 16),每一列对应一个 x 值,每一行对应同一个 y 值。# Y 的每一列都是 y 列表的重复,所以 Y 的形状也是 (128, 16),每一行对应一个 y 值。# 因此,最终的网格在 x 方向上是非均匀的(因为 x 不均匀),在 y 方向上是均匀的。# 4. 计算 Z 值Z = (1 - X/2 + X**5 + Y**3) * np.exp(-X**2 - Y**2)# 这是一个二维函数,具有复杂的形状,exp(-X^2 - Y^2) 部分使其在原点附近衰减。# 5. 绘制图形fig, ax = plt.subplots() # 创建一个图形(figure)和一个坐标轴(axes)ax.pcolormesh(X, Y, Z, vmin=-0.5, vmax=1.0)# X, Y 定义了网格的坐标(非均匀)。# Z 是每个网格点的颜色值。# vmin=-0.5, vmax=1.0 设定颜色映射的范围,将 Z 值限制在 [-0.5, 1.0] 之间,# 小于 -0.5 的值映射为同一种颜色,大于 1.0 的亦然。这有助于突出中间范围的细节。plt.show()
pcolormesh 比 imshow 更灵活,因为 x 和 y 向量不需要等间距(实际上它们甚至可以是倾斜的)。
imshow | pcolormesh | |
|---|---|---|
| 网格类型 | ||
| 坐标输入 | Z,可选 extent 参数指定整体边界 | X, Y(或一维边界向量),定义每个单元格的角落位置 |
| 单元格位置 | extent 设置边界 | |
| 轴方向 | origin 改变 | origin 调整 |
| 性能 | ||
| 插值 | interpolation='bilinear') | |
| 常用场景 |
Python Matplotlib将数据显示为图像
数智岩隧,公众号:数智岩隧Python Matplotlib将数据显示为图像
