Python 在六边形中绘制三角形并不容易

Python 在六边形中绘制三角形并不容易,python,matplotlib,triangular,Python,Matplotlib,Triangular,我正在使用matplotlib 我设法用plt.scatter绘制了一个六边形的2D数组,其中我将六边形的标记设置为“h”,并将大小设置为s=500左右。通过简单的数学运算,我为每个六边形的位置制作了数组,将节距归一化为1。这是我的六边形图,按预期绘制 然而,我想在这些六边形中画出6个相等的三角形,这并不容易。下面是我用来绘制三角形的部分代码: fig4, ax4 = plt.subplots() ax4.set_aspect('equal') for i in range(len(powtri

我正在使用matplotlib

我设法用plt.scatter绘制了一个六边形的2D数组,其中我将六边形的标记设置为“h”,并将大小设置为s=500左右。通过简单的数学运算,我为每个六边形的位置制作了数组,将节距归一化为1。这是我的六边形图,按预期绘制

然而,我想在这些六边形中画出6个相等的三角形,这并不容易。下面是我用来绘制三角形的部分代码:

fig4, ax4 = plt.subplots()
ax4.set_aspect('equal')
for i in range(len(powtri)):
    for j in range(len(powtri[i])):
        plt.scatter(x=X_tric[i][j], y=Y_tric[i][j], s=size, marker=markers[i][j], c=powtri[i][j], cmap='jet')
cbar3 = plt.colorbar(fraction=0.03, pad=0.04)  
cbar3.set_label('Normalized assembly power')
plt.axis('off')
plt.title('Triangle Powers')
我的选项是使用标记4和5或标记数组中使用的标记来交替左/右三角形,然后计算每个三角形的中心或每个三角形的尖端位置,但实际的问题是,我的图片总是被难看的格式截去,三角形标记的大小和位置也在不断变化,所以我最终得到了

我是不是走错了路


谢谢。

我想你需要一个等边三角形来做你想做的事情,我认为4,5,提供的选项不太正确

幸运的是,matplotlib允许您这样做。有两种方法可能对您的项目特别有用

创建一个正多边形标记,标记=N,0,角度,其中N是边数,角度是旋转标记的方式,例如。 plt.散射[0],[0],标记=3,0,0 使用顶点列表创建标记。例如,你可以使用 长度=np.sqrt1**2-0.5**2 plt.scatter[0],[0],marker=[0,0,1,0,0.5,长度] 在你的情况下,第二种选择似乎是可行的。我之所以这么说,是因为当与to rotate标记结合使用时,旋转似乎发生在0附近,而对于3,0,0方法,它发生在三角形的中心附近,我没有研究原因。 把它们放在一起

import matplotlib.pyplot as plt
from matplotlib.markers import MarkerStyle
import numpy as np

fig, ax = plt.subplots()

length = np.sqrt(1**2 - 0.5**2)
m = MarkerStyle([(0, 0), (1, 0), (0.5, length)])

for deg in range(6):
    m._transform.rotate_deg(60)
    ax.scatter([0], [0], marker=m, s=10000)

fig.show()
你可以得到这个。我希望这对实现你的目标有用


听起来是个好主意,但我已经成功了。这仅适用于六角形垂直指向的左三角形和右三角形。我不得不将我的主数组相应地分成左三角形和右三角形。然后,我将市场规模与屏幕规模关联起来,以便为任何客户提供服务。还有塔达!