我正在尝试为流网绘制 2D 等高线图,但无法正确显示初始网格。
给定列数和行数,我如何编写一个函数来绘制网格,以便显示给定范围内的所有点?
我尝试通过这样做绘制 4 列和 3 行点:
r = 3
c = 4
x = [i for i in range(c)]
y = [i for i in range(r)]
plot(x,y,'ro')
grid()
show()
并得到这个错误:
'ValueError: x and y must have same first dimension'
所以我尝试在 4x4 网格上测试它并得到了这个并且我接近我想要的,但是它只绘制点 (0,0)、(1,1)、(2,2) 和 (3) ,3)
但是,我还想要点 (0,0)、(1,0)、(2,0)、(3,0)、(1,0)、(1,1)...(3 ,2), (3,3) 出现,因为我稍后需要从该点绘制矢量,指示我的流网的流向。
抱歉,我知道我的术语不是那么好。有谁知道如何执行此操作以及如何使其适用于非正方形的网格?
请您参考如下方法:
- 你可以使用 itertools.product生成所需的点。
- 使用plt.scatter绘制点
- 使用plt.quiver绘制矢量场。 (相关代码摘自these SO answers)
import numpy as np
import matplotlib.pyplot as plt
import itertools
r = 3
c = 4
x = np.linspace(0, c, c+1)
y = np.linspace(0, r, r+1)
pts = itertools.product(x, y)
plt.scatter(*zip(*pts), marker='o', s=30, color='red')
X, Y = np.meshgrid(x, y)
deg = np.arctan(Y**3 - 3*Y-X)
QP = plt.quiver(X, Y, np.cos(deg), np.sin(deg))
plt.grid()
plt.show()
