繁体   English   中英

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

[英]How to plot a vector field over a contour plot in 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()

您有两个问题:

  • 在绘图之间调用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()

结果:

等高线图

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM