Numpy中 meshgrid()
和等高线绘图contour()/contourf()
的搭配使用
np.meshgrid()
接收参数np.meshgrid(x1,x2,x3...)
x1,x2,x3…为代表网格坐标的一维数组
网格坐标(以最为常见的二维网格为例):在一个二维平面中,设横轴坐标是1,2,3,过这几个点做平行于纵轴的直线,
纵轴坐标为2,3,4,过这几个点做平行于横轴的直线,则各条直线相交点的坐标即为网络坐标(示意图如下)
图中红色星号点即为网络坐标点
下面我们通过meshgrid()
方法看看得到了什么
横坐标x
和纵坐标y
经过meshgrid(x,y)
后返回了所有直线相交的网络坐标点的横坐标xx
和纵坐标yy
,xx
数组和yy
数组对应位置组成网络格点的坐标(1,2)(2,2)(3,2)(1,3)(2,3)
等等,注意:meshgrid返回的xx
和yy
数组的大小总是一致的(废话,不一致怎么能有对应坐标,哈哈)
matplotlib.pyplot.contour
两者均为等高线绘制方法:等高线(如下图所示图片来源百度百科),地理中的概念,一般指两处地势高度相同,将地势高度相同的点用光滑线相连接就得到了等高线,在这里一般指经过函数计算后结果相同的点连接起来构成等高线
两者的区别:contour仅仅绘制出等高线边界处的轮廓线,而contourf会对两个相邻轮廓线之间即等高区域进行颜色填充
接收参数contour(x,y,z,levels,alpha,colors,cmap)
注:这里我只选常用到的参数进行说明,更详细参数设置点击这里
z
是(N,M)
数组
x,y
可以是二维数组,其大小必须与z
一致;也可以是一维数组,此时必须满足len(x)=N,len(y)=M
,可以将其看做输入了一维横坐标和一维纵坐标,然后contour()
内部完成了meshgrid()
过程
x,y
也可以不输入,此时默认为x=range(N),y=range(M)
,即转换为上面的一维横纵坐标数组
levels
可以是int
或类数组,int
时表示绘制等高线的个数,等高线之间的间距按个数自动生成
类数组时,表示等高线的具体位置
levels为int时:
import matplotlib.pyplot as plt
x = np.array([1,2,3])
y