Вам просто нужно превратить (y, z)
координаты из ваших шестиугольников в y
декартовы координаты на осях matplotlib.
Я думаю, что правильный способ сделать это - использовать эту формулу:
y_cartesian = (2 / 3) * sin(60) * (y_hex - z_hex)
Затем вы можете добавить шестиугольники с помощью патча RegularPolygon
matplotlib или графика центры, использующие scatter
.
Вот сценарий для построения сюжета из ваших списков:
import matplotlib.pyplot as plt
from matplotlib.patches import RegularPolygon
import numpy as np
coord = [[0,0,0],[0,1,-1],[-1,1,0],[-1,0,1],[0,-1,1],[1,-1,0],[1,0,-1]]
colors = [["Green"],["Blue"],["Green"],["Green"],["Red"],["Green"],["Green"]]
labels = [['yes'],['no'],['yes'],['no'],['yes'],['no'],['no']]
# Horizontal cartesian coords
hcoord = [c[0] for c in coord]
# Vertical cartersian coords
vcoord = [2. * np.sin(np.radians(60)) * (c[1] - c[2]) /3. for c in coord]
fig, ax = plt.subplots(1)
ax.set_aspect('equal')
# Add some coloured hexagons
for x, y, c, l in zip(hcoord, vcoord, colors, labels):
color = c[0].lower() # matplotlib understands lower case words for colours
hex = RegularPolygon((x, y), numVertices=6, radius=2. / 3.,
orientation=np.radians(30),
facecolor=color, alpha=0.2, edgecolor='k')
ax.add_patch(hex)
# Also add a text label
ax.text(x, y+0.2, l[0], ha='center', va='center', size=20)
# Also add scatter points in hexagon centres
ax.scatter(hcoord, vcoord, c=[c[0].lower() for c in colors], alpha=0.5)
plt.show()
person
tmdavison
schedule
02.10.2017
coord
. Вы, вероятно, захотите указать используемое здесь соглашение, например если я возьму список[[a,b,c],[d,e,f]]
, что такое a, b, c, d, e, f? - person ImportanceOfBeingErnest   schedule 02.10.2017coord
- это список, представляющий позиции 7 шестиугольников. См .: redblobgames.com/grids/hexagons/#coordinates - person ishido   schedule 02.10.2017