2016-12-02 194 views
2

我已经设法绘制一个矢量场和一个等高线图,并且想将它们显示在彼此之上,我环顾四周,但不太了解图和子图的工作方式。这里是我的代码:如何绘制matplotlib中等值线图上的矢量场?

from matplotlib.pyplot import cm 
import numpy as np 
import matplotlib.pyplot as plt 

# Vector Field 
Y, X = np.mgrid[-2:2:20j, -2:2:20j] 
U =(1 - 2*(X**2))*np.exp(-((X**2)+(Y**2))) 
V = -2*X*Y*np.exp(-((X**2)+(Y**2))) 
speed = np.sqrt(U**2 + V**2) 
UN = U/speed 
VN = V/speed 
plt.quiver(X, Y, UN, VN, 
      color='Teal', 
      headlength=7) 

plt.show() 


# Countour Plot 
X, Y = np.mgrid[-2:2:100j, -2:2:100j] 
Z = X*np.exp(-(X**2 + Y**2)) 
cp = plt.contourf(X, Y, Z) 
plt.colorbar(cp) 

plt.show() 

回答

1

你有两个问题:

  • 要求在地块之间plt.show():这使得代替覆盖一个在另一个
  • 绘制颤动情节他们单独的数字,在等值线图之前:所以即使你删除了show(),等高线图也会掩盖这个箭头。

简单修复!

from matplotlib.pyplot import cm 
import numpy as np 
import matplotlib.pyplot as plt 

# Contour Plot 
X, Y = np.mgrid[-2:2:100j, -2:2:100j] 
Z = X*np.exp(-(X**2 + Y**2)) 
cp = plt.contourf(X, Y, Z) 
cb = plt.colorbar(cp) 

# Vector Field 
Y, X = np.mgrid[-2:2:20j, -2:2:20j] 
U =(1 - 2*(X**2))*np.exp(-((X**2)+(Y**2))) 
V = -2*X*Y*np.exp(-((X**2)+(Y**2))) 
speed = np.sqrt(U**2 + V**2) 
UN = U/speed 
VN = V/speed 
quiv = plt.quiver(X, Y, UN, VN, # assign to var 
      color='Teal', 
      headlength=7) 

plt.show() 

结果:

contour quiver plot