如何在matplotlib中绘制轮廓图上的矢量场?

4
我已经成功画出了一个矢量场和等值线图,并希望将它们显示在彼此上方,我查看了一些资料,但并不太理解figure和subplots的工作原理。以下是我的代码:
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个回答

5
您有两个问题:
  • 在绘制图形之间调用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()

结果:

轮廓箭头图


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接