等高线
import numpy as np
import matplotlib.pyplot as pltdef f(x,y):return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)
n=256
x=np.linspace(-3,3,n)
y=x
X,Y=np.meshgrid(x,y)
plt.contourf(X,Y,f(X,Y),8,alpha=0.75,cmap='viridis')
plt.colorbar()
C=plt.contour(X,Y,f(X,Y),8,colors='k',linewidths=0.5)
plt.clabel(C,inline=True,fontsize=10,fmt='%1.1f')
plt.xticks(())
plt.yticks(())
plt.show()
画等高线肯定是一个三维图形,所以先定义一个函数。plt.contourf是画上图中的颜色部分,8是呈现的等高线部分数,alpha是调节透明度,cmap是绘制等高线(内部)的颜色。
plt.contour是绘制线条的,这里注意colors参数不能简写为c(不同于color),同样linewidths不能简写为lw。colors设置的是线的颜色,linewidths设置的是线的宽度。
plt.clabel是设置标注的数字,将上述的线命名为C,传入clabel中;inline表示线是否(True)穿过数字,fontsize是设置字体大小,fmt是设置数字格式。
热力图
import numpy as np
import matplotlib.pyplot as pltn=256
x=np.random.rand(16,16)
plt.figure()
plt.imshow(x,cmap='inferno',interpolation='none')
plt.colorbar()
plt.show()
热力图的绘制比较简单,主要是利用plt.imshow函数。interpolation是设置插值方法(默认就是none,不用写也可以)。因为在这里我们要画的就是热力图,所以不需要插值。举个例子,一张图片实际上是有许多小的元素方块组成的,如果你想从整体上得到一个平滑不突兀的效果(即看不出来小方块的痕迹),那么一个方法就是使用更多的小方块,另一个就是利用插值让画面看起来更平滑(方块与方块的界限不明显)。