Я хочу построить гексагональную решетку, начиная с функции meshgrid, которая дает мне квадратную решетку.
import numpy as np
import matplotlib.pyplot as plt
xx, yy = np.meshgrid(np.arange(10), np.arange(10), indexing='ij')
plt.scatter(xx,yy)
plt.show()
![square lattice](https://i.stack.imgur.com/K8BCn.png)
Если преобразовать все точек матрицы A, которая содержит базисные векторы гексагональной решетки, я получаю:
A = np.array([[3./2, 3./2],[np.sqrt(3)/2, -np.sqrt(3)/2]])
pts = np.einsum('ij,jk->ik',A,np.array([xx.flatten(),yy.flatten()]))
plt.scatter(pts[0,:], pts[1,:])
plt.show()
![enter image description here](https://i.stack.imgur.com/RufIE.png)
Я думаю, что это было бы более элегантно если бы вместо преобразования каждой точки я мог просто преобразовать оси моей системы координат, чтобы получить тот же результат. Есть ли в matplotlib функция, позволяющая мне изменять базисные векторы с [1,0] и [0,1] на [3./2, sqrt (3) / 2] и [3./2, -sqrt ( 3) / 2]? Или я могу дать такую матрицу np.meshgrid?