如何在matplotlib中的等高线图上绘制向量场?

2024-09-19 20:12:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经画出了一个向量场和一个等高线图,我想把它们放在一起,我环顾了一下,但不太明白图形和子图是如何工作的。这是我的代码:

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()

Tags: import图形matplotlibasshownppltcp
1条回答
网友
1楼 · 发布于 2024-09-19 20:12:55

你有两个问题:

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

相关问题 更多 >