Pic*_*las 3 python matplotlib linear-algebra coordinate-transformation python-3.x
我想从 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()
Run Code Online (Sandbox Code Playgroud)
如果通过包含六边形点阵基向量的矩阵 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()
Run Code Online (Sandbox Code Playgroud)
我认为如果不是变换每个点,而是变换坐标系的轴以获得相同的结果,那会更优雅。matplotlib 中是否有一个函数允许我将基向量从 [1,0] 和 [0,1] 更改为 [3./2, sqrt(3)/2] 和 [3./2, -sqrt( 3)/2]?或者我可以给 np.meshgrid 这样的矩阵吗?
您可以为散射提供仿射变换以倾斜旋转点。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.transforms as mtrans
xx, yy = np.meshgrid(np.arange(10), np.arange(10))
A = np.array([[3./2, 3./2, 0],[np.sqrt(3)/2, -np.sqrt(3)/2, 0], [0,0,1]])
fig, ax = plt.subplots()
plt.scatter(xx.flat, yy.flat, transform=mtrans.Affine2D(A) + ax.transData)
plt.show()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
279 次 |
| 最近记录: |