我正在尝试为流网启动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)出现,因为我稍后需要从这一点绘制矢量,指示我的流网的流动方向。
抱歉,我知道我的术语不太好。有谁知道如何做到这一点,以及如何让它适用于不正方形的网格?
答案 0 :(得分:6)
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()
答案 1 :(得分:3)
r = 3
c = 4
x = [i % c for i in range(r*c)]
y = [i / c for i in range(r*c)]
print x
print y
给出:
[0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]
[0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2]
当用于绘制图形时,它会产生所需的结果。
答案 2 :(得分:2)
前两个参数指定x和y组件。所以点数必须匹配。我想你想要的是:
from itertools import product
import matplotlib.pyplot as plt
points = np.array(list(product(range(3),range(4))))
plt.plot(points[:,0],points[:,1],'ro')
plt.show()