Matplotlib(7)——等高线图、热力图

 

 

 

等高线图

plt.contour()  函数用来画线

plt.contourf()函数用来填充

 

实验一:单独使用plt.contour()函数画等高线的效果。

import numpy as np
import matplotlib.pyplot as plt


def h(x, y):                                                              #定义x,y坐标对应的高度函数
    return (1-x/2+x**5+y**3) * np.exp(-x**2-y**2) 

 

m,n=200,250
x=np.linspace(-3,3,m)
y=np.linspace(-3,3,n)

 

X,Y=np.meshgrid(x,y)                                                #生成网格数据

 

plt.contour(X,Y,h(X,Y),10)                            #参数:x、y对应的网格数据;高度;2代表的是显示等高线的密集程度,

                                                                    #数值越大,画的等高线数就越多

plt.show()

运行结果:

                    Matplotlib(7)——等高线图、热力图

还可以增加colors='black',linewidths=1等属性改变颜色和线条粗细。注意都要加复数,否则没有效果。很多教程都没有加。

可以看到只有线没有颜色。

 

实验二:单独使用plt.contourf()函数的效果。

import numpy as np
import matplotlib.pyplot as plt


def h(x, y):  
    return (1-x/2+x**5+y**3) * np.exp(-x**2-y**2) 

 

m,n=200,250

x=np.linspace(-3,3,m)
y=np.linspace(-3,3,n)

 

X,Y=np.meshgrid(x,y)

 

plt.contourf(X,Y,h(X,Y),10)                         #单独使用contoutf()函数。

 

plt.show()                

运行结果:

              Matplotlib(7)——等高线图、热力图

可以看到只有颜色填充,没有线。

 

实验三:同时使用contour()、contourf()的效果。

import numpy as np
import matplotlib.pyplot as plt


def h(x, y):  
    return (1-x/2+x**5+y**3) * np.exp(-x**2-y**2) 

 

m,n=200,250
x=np.linspace(-3,3,m)
y=np.linspace(-3,3,n)

 

X,Y=np.meshgrid(x,y)

 

plt.contourf(X,Y,h(X,Y))
plt.contour(X,Y,h(X,Y),10)

 

plt.show()                

运行效果:

                  Matplotlib(7)——等高线图、热力图

 

实验四、改成热力图。

上面的颜色太冷了,想显示热力图,那只要在plt.contourf()函数中添加属性cmap=plt.cm.hot就能显示热力图,其中cmap代表为color map,我们把color map映射成hot(热力图)。

import numpy as np
import matplotlib.pyplot as plt


def h(x, y):  
    return (1-x/2+x**5+y**3) * np.exp(-x**2-y**2) 

 

m,n=200,200
x=np.linspace(-3,3,m)
y=np.linspace(-3,3,n)

 

X,Y=np.meshgrid(x,y)

 

plt.contourf(X,Y,h(X,Y),20,cmap=plt.cm.hot)                     #负责填充颜色。
plt.contour(X,Y,h(X,Y),20,colors='black',linewidths=1)      #负责画线。

 

plt.show()

运行结果:

                Matplotlib(7)——等高线图、热力图

使用了颜色之后,虚线代表负的,实线代表正的。

 

实验五、在等高线上增加标注

import numpy as np
import matplotlib.pyplot as plt


def h(x, y):  
    return (1-x/2+x**5+y**3) * np.exp(-x**2-y**2) 

 

m,n=200,200
x=np.linspace(-3,3,m)
y=np.linspace(-3,3,n)

 

X,Y=np.meshgrid(x,y)                                                         #生成网格数据。

 

plt.contourf(X,Y,h(X,Y),20,cmap=plt.cm.hot)                       #填充
C=plt.contour(X,Y,h(X,Y),20,colors='black',linewidths=1)   #画线
plt.clabel(C,inline=True,fontsize=12)                                 #标注

 

plt.show()

运行结果:

              Matplotlib(7)——等高线图、热力图