tags: [笔记, Matplotlib, contourf()]
categories: [笔记, Matplotlib, contourf()]
语法
contourf([X, Y,] Z, [levels], **kwargs)
功能
contour()和contourf()分别绘制等高线和填充等高线。除非另有说明,两个版本的函数签名和返回值是相同的。
参数
X, Y: **array-like, optional
Z中值的坐标。X和Y必须是与Z相同形状的2D数据(例如,通过numpy.meshgrid创建),或者它们必须是1-D,这样len(X) == M是Z中的列数,len(Y) == N是Z中的行数。
如果没有给出,则假设它们是整数索引,即X = range(M), Y = range(N)。
Z: (N, M) array-like
绘制等高线的高度值。
levels: int or array-like, optional**
确定轮廓线/区域的数量和位置。如果为int n,则使用MaxNLocator,它会尝试在vmin和vmax之间自动选择不超过n + 1个等高线levels。
如果是类数组,则在指定的levels上绘制等高线。这些值必须按递增顺序排列。
返回
例1 基础用法
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 计算x,y坐标对应的高度值
def f(x, y):
return (1-x/2+x**3+y**5) * np.exp(-x**2-y**2)
# 生成x,y的数据
x = np.linspace(-3, 3, 251)
y = np.linspace(-3, 3, 201)
# 把x,y数据生成mesh网格状的数据,因为等高线的显示是在网格的基础上添加上高度值
X, Y = np.meshgrid(x, y)
f(X,Y).shape
# 填充等高线
plt.contourf(X, Y, f(X, Y))
# 显示图表
plt.show()
例2 levels的用法
当为整数的时候, 如levels=3, 他会将数值分成三份, 设置为10就是分为10份, 可以看下面的例子.
import numpy as np
import matplotlib.pyplot as plt
x, y = np.meshgrid(np.arange(10),np.arange(10))
z = np.sqrt(x**2 + y**2)
cs = plt.contourf(x,y,z,levels=10)
plt.show()
当然levels后面也是可以跟lists, 注意lists中的数字必须从小到大. 这个数字表示的是a0-a1是一部分, a1-a2是一部分. 比如levels=[2,3,4,6], 就表示2<x<3, 3<x<4, 4<x<5, 5<x<6, 最终的结果如下图所示.
import numpy as np
import matplotlib.pyplot as plt
x, y = np.meshgrid(np.arange(10),np.arange(10))
z = np.sqrt(x**2 + y**2)
cs = plt.contourf(x,y,z,levels=[2,3,4,6])
plt.show()
例3 自定义颜色 color参数
自定义颜色需要配合levels来进行使用, 比如我们指定了levels对应着三个范围, 我们就可以对这三个范围依次设置颜色, 如下所示.
x, y = np.meshgrid(np.arange(10),np.arange(10))
z = np.sqrt(x**2 + y**2)
cs = plt.contourf(x,y,z,levels=[2,3,4,6], colors=['lightgreen', 'royalblue', 'gold'])
plt.show()
x = np.arange(1, 10)
x
y = x.reshape(-1, 1)
y
h = x * y
cs = plt.contourf(h, levels=[10, 30, 50], colors=['#808080', '#A0A0A0', '#C0C0C0'], extend='both')
cs.cmap.set_over('red')
cs.cmap.set_under('blue')
cs.changed()
# 避免图片显示不完全
# plt.tight_layout()
# Label a contour plot.显示出等高线的值,以及指定颜色
plt.clabel(cs,fontsize=8,colors=['red','red','blue'])
plt.show
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
array([[1],
[2],
[3],
[4],
[5],
[6],
[7],
[8],
[9]])
<a list of 3 text.Text objects>