Построение сетки в Python - PullRequest
       15

Построение сетки в Python

1 голос
/ 29 марта 2012

Я пытаюсь запустить двухмерный контурный контур для сети, и у меня возникают проблемы с отображением начальной сетки.

Учитывая количество столбцов и количество строк, как я могу написать функцию, которая будет строить сетку так, чтобы отображались все точки в данном диапазоне?

Я попытался построить 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), так как позже мне понадобится построить векторы из этой точки, указывающие направление потока для моей сети.

Извините, я знаю, что моя терминология не так уж хороша. Кто-нибудь знает, как это сделать и как это работает для сеток, которые не являются квадратными?

Ответы [ 3 ]

6 голосов
/ 29 марта 2012
  • Вы можете использовать itertools.product для генерации желаемых точек.
  • Используйте plt.scatter для построения точек
  • Используйте plt.quiver для построения векторного поля.(Соответствующий код взят из этих ответов SO )

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

enter image description here

3 голосов
/ 29 марта 2012
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 голосов
/ 29 марта 2012

Первые два аргумента указывают ваши компоненты 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...