等高线图 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() |
运行结果:  还可以增加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() |
运行结果:  可以看到只有颜色填充,没有线。 实验三:同时使用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() |
运行效果:  实验四、改成热力图。 上面的颜色太冷了,想显示热力图,那只要在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() |
运行结果:  使用了颜色之后,虚线代表负的,实线代表正的。 实验五、在等高线上增加标注
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() |
运行结果:  |