matplotlib 笔记: contourf & contour

这篇博客介绍了如何使用matplotlib的contourf和contour函数来绘制等高线图。文章详细阐述了基本使用方法、主要参数,并通过实例展示了不同参数设置下的等高线和填充等高线效果,包括level和extend参数的应用。通过阅读,读者可以掌握在Python中创建等高线图的基本技巧。

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

contour 和 contourf 分别绘制等高线和填充等高线

1 基本使用方法

matplotlib.pyplot.contourf([X, Y,] Z, [levels], **kwargs)

2 主要参数 

X, Y

Z 中的值的坐标。

X 和 Y 必须都是二维的,具有与 Z 相同的形状(例如,通过 numpy.meshgrid 创建),或者它们必须都是一维的,这样 len(X) == N ,len(Y ) == M 是 Z 中的行数和列数。

X 和 Y 都必须单调排序。

z绘制等高线的高度值。
levels

确定等高线/区域的数量和位置。

如果是整数n,请使用 MaxNLocator,它会尝试在 vmin 和 vmax 之间自动选择不超过 n+1 个”好“的等高级别。

如果是数组,则在指定级别绘制等高线。 这些值必须按升序排列。

colors

级别的颜色,即等高线轮廓的线条和等高线轮廓的区域。

该序列按升序循环用于各个级别。 如果序列比级别数短,则重复。

作为一种快捷方式,可以使用单一颜色字符串代替单元素列表,即“red”而不是 [“red”] 以用相同的颜色为所有级别着色。

默认情况下(值 None),将使用 cmap 指定的颜色图。

cmap
alpha透明度,0~1之间的数
extend

确定级别范围之外的值的轮廓着色。

如果“both”,则级别范围之外的值不着色。

如果是“min”、“max”或“both”,则为低于、高于或低于和高于水平范围的值着色。 低于 min(levels) 和高于 max(levels) 的值被映射到颜色图的低于/高于值。 

 3 举例

3.0 数据部分

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1, 10)
y = x.reshape(-1, 1)
h = x * y
print(x,'\n',y,'\n',h)
'''
[1 2 3 4 5 6 7 8 9] 

 [[1]
 [2]
 [3]
 [4]
 [5]
 [6]
 [7]
 [8]
 [9]] 

 [[ 1  2  3  4  5  6  7  8  9]
 [ 2  4  6  8 10 12 14 16 18]
 [ 3  6  9 12 15 18 21 24 27]
 [ 4  8 12 16 20 24 28 32 36]
 [ 5 10 15 20 25 30 35 40 45]
 [ 6 12 18 24 30 36 42 48 54]
 [ 7 14 21 28 35 42 49 56 63]
 [ 8 16 24 32 40 48 56 64 72]
 [ 9 18 27 36 45 54 63 72 81]]
'''

3.1 最基本

plt.contourf(x.reshape(-1),
             y.reshape(-1),
             h)

3.2 level 

plt.contourf(x.reshape(-1),
             y.reshape(-1),
             h,
             levels=1)

plt.contourf(x.reshape(-1),
             y.reshape(-1),
             h,
             levels=[1,3,15,35])

 3.3 extend

plt.contourf(x.reshape(-1),
             y.reshape(-1),
             h,
             levels=[13,15,35], 
             )

 

 

plt.contourf(x.reshape(-1),
             y.reshape(-1),
             h,
             levels=[13,15,35], 
             extend='both')

 

`norm` 参数用于指定等高线图的颜色映射归一化方式,它可以取以下两种类型之一: - `matplotlib.colors.Normalize` 对象:表示使用自定义的归一化方式。可以通过 `matplotlib.colors.Normalize` 类的子类(例如 `matplotlib.colors.LogNorm`、`matplotlib.colors.PowerNorm` 等)来指定不同的归一化方式,或者通过自定义归一化函数来实现自定义的归一化方式。 - 字符串:表示使用默认的归一化方式。可以是以下字符串之一: - `'linear'`:表示使用线性归一化方式,即将数据范围映射到 [0, 1] 的范围内。 - `'log'`:表示使用对数归一化方式,即将数据范围的对数映射到 [0, 1] 的范围内。 - `'symlog'`:表示使用对数归一化方式,但可以对数据范围的中央部分进行线性缩放。需要指定一个参数 `linthresh`,表示线性缩放的阈值。 - `'power'`:表示使用幂函数归一化方式,即将数据范围的幂函数映射到 [0, 1] 的范围内。需要指定一个参数 `gamma`,表示幂函数的指数。 - `'none'`:表示不进行归一化,即颜色映射范围等于数据范围。 下面是一个使用 `LogNorm` 归一化方式的例子: ```python import matplotlib.pyplot as plt import numpy as np from matplotlib.colors import LogNorm x = np.linspace(-5, 5, 101) y = np.linspace(-5, 5, 101) X, Y = np.meshgrid(x, y) Z = np.sin(np.sqrt(X**2 + Y**2)) fig, ax = plt.subplots() levels = np.linspace(-1, 1, 21) norm = LogNorm(vmin=0.01, vmax=1) cs = ax.contourf(X, Y, Z, levels=levels, norm=norm, cmap='coolwarm') fig.colorbar(cs, ax=ax) plt.show() ``` 在这个例子中,我们使用 `LogNorm` 归一化方式,将颜色映射范围映射到一个对数尺度上。需要注意的是,由于数据中有负数,因此我们需要将数据转换为非负数。具体来说,我们使用 `np.sin` 函数对数据进行映射,将数据范围限制在 [-1, 1] 之间。然后,我们将等高线图分成 21 层,并使用 `coolwarm` 颜色映射表进行填充。最后,我们在图形右侧添加了一个颜色条,用于显示颜色映射关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UQI-LIUWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值