利用matplotlib库中pcolormesh作彩图

在做Learning from data课本习题4.4的时候,需要作彩图,对matplotlib中pcolormesh专门研究了下,
这里详细记录一波,其实这部分作图和之前隐函数作图的流程非常相似,可以从后面看到。

首先看个最简单的图。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import matplotlib.pyplot as plt
import numpy as np
#定义点的数量
n=500

#作点
x=np.linspace(-10,10,500)
y=np.linspace(-10,10,500)

#构造点
X,Y=np.meshgrid(x,y)
Z=np.sin(X+Y)

#作图
plt.pcolormesh(X,Y,Z)
plt.show()

png

整个流程和隐函数是基本一致的,接下来看一些参数,参数还是非常多的,这里主要介绍cmap,vmin,vmax,
除此之外,还会介绍colorbar方法,下面分别看下。

cmap参数

cmap参数是设置颜色,设置方法是首先利用plt.cm.get_cmap设置样式,然后将这个样式传递给pcolormesh,具体的颜色类型可以参考官网

https://matplotlib.org/examples/color/colormaps_reference.html

这里演示两种样式。

1
2
3
cm=plt.cm.get_cmap('rainbow')
plt.pcolormesh(X,Y,Z,cmap=cm)
plt.show()

png

1
2
3
cm=plt.cm.get_cmap('flag')
plt.pcolormesh(X,Y,Z,cmap=cm)
plt.show()

png

vmin,vmax参数与colorbar

vmin,vmax也是设置颜色的参数,在解释之前,我们先使用colorbar方法看下颜色对应的数值,使用方法很简单,
只要在plt.show()之前使用plt.colorbar()即可。

1
2
3
4
cm=plt.cm.get_cmap('rainbow')
plt.pcolormesh(X,Y,Z,cmap=cm)
plt.colorbar()
plt.show()

png

右侧的colorbar表示颜色对应的数值,有了这个colorbar,就可以很方便的解释vmin,vmax。vmin,vmin可以控制颜色对应的数值的上下限,
设置之后会对原图产生一定的变化,个人理解是辨析度的区别,下面看下。

1
2
3
4
cm=plt.cm.get_cmap('rainbow')
plt.pcolormesh(X,Y,Z,cmap=cm,vmin=-0.2,vmax=0.2)
plt.colorbar()
plt.show()

png

1
2
3
4
cm=plt.cm.get_cmap('rainbow')
plt.pcolormesh(X,Y,Z,cmap=cm,vmin=-2,vmax=2)
plt.colorbar()
plt.show()

png

感觉这个功能不必要深纠,只要知道使用方法即可。

自定义函数作图

之前作图是使用numpy自带的函数,如果我们要使用自己的函数该如何操作呢?其实也不难,只要明白我们需要构造一个二维数组即可。
这里举个具体的例子,假设x=[1,2,3],y=[1,2],那么一共有6个格点,f为我们的函数,我们只要构造z,使得z[i][j]=f(i,j)即可,如果这里f(x,y)=x+y,那么我们的数组z=[[2,3,4],[3,4,5]],下面从一个具体例子中看一下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import matplotlib.pyplot as plt
import numpy as np
#定义点的数量
n=500

#作点
x=np.linspace(-30,30,500)
y=np.linspace(-30,30,500)

#构造点
X,Y=np.meshgrid(x,y)
Z=[]
def f(x,y):
return x*np.sin(x)+y**2
for i in y:
z=[]
for j in x:
z.append(f(j,i))
Z.append(z)

plt.pcolormesh(X,Y,Z,edgecolors='face')
plt.show()

png