在Python中绘制二维方形原子晶格的最佳方法?
问题摘要: 我正在研究一个物理问题,我想画一个二维原子晶格,其中的节点用箭头连接,如图所示 我所尝试的: 我曾尝试使用NetworkX,从中获得帮助,但未能使其按我所希望的方式工作。我使用的代码如下:在Python中绘制二维方形原子晶格的最佳方法?,python,python-3.x,networkx,physics,Python,Python 3.x,Networkx,Physics,问题摘要: 我正在研究一个物理问题,我想画一个二维原子晶格,其中的节点用箭头连接,如图所示 我所尝试的: 我曾尝试使用NetworkX,从中获得帮助,但未能使其按我所希望的方式工作。我使用的代码如下: G = nx.grid_2d_graph(4,4) pos = dict( (n, n) for n in G.nodes() ) nx.draw_networkx(G, pos=pos) plt.axis('off') plt.show() 这就产生了以下内容,而这正是我所想的。这里是一个使用
G = nx.grid_2d_graph(4,4)
pos = dict( (n, n) for n in G.nodes() )
nx.draw_networkx(G, pos=pos)
plt.axis('off')
plt.show()
这就产生了以下内容,而这正是我所想的。这里是一个使用
matplotlib
的箭头的简单方法。它要求将网格(图形)表示为字典,其中关键点是网格上的点(节点)坐标,值是应绘制向外箭头(边)的相邻点。当网格大小更改时,可能需要使用w
、h
等来控制打印元素的大小
grid={#点(x,y),传出连接[点]
(0, 0): [(0, 1), (1, 0)],
(0, 1): [],
(1, 0): [],
(1, 1): [(1, 0), (0, 1)]
}
w=0.005#误差宽度
h=0.05#误差头部宽度
图,ax=plt.子批次()
对于grid.items()中的点、连接:
对于传出in连接:
dx=输出[0]-点[0]
dy=输出[1]-点[1]
ax.箭头(点[0],点[1],
dx/2,dy/2,
宽度=w,头部宽度=h,
facecolor=“k”,
zorder=0)
ax.箭头(点[0]+dx/2,
第[1]+dy/2点,
dx/2,dy/2,
宽度=w,头部宽度=0,
facecolor=“k”,
zorder=0)
轴图(*点,
marker=“o”,markersize=10,markeredgecolor=“k”,
markerfacecolor=“红色”,
zorder=1)
当我想到简的答案时,我正试图使用箭袋图。我修改了他的代码来处理箭袋图
def plot_vector(p1,p2):
p1 = np.array(p1)
p2 = np.array(p2)
dp = p2-p1
plt.quiver(p1[0], p1[1], dp[0], dp[1],angles='xy', scale_units='xy', scale=1, headwidth = 5, headlength = 7)
grid = { # point(x, y), outgoing connections [points]
(0, 0): [(0, 1), (1, 0)],
(0, 1): [],
(1, 0): [],
(1, 1): [(1, 0), (0, 1)]
}
fig, ax = plt.subplots()
for point, connections in grid.items():
for outgoing in connections:
plot_vector(point,outgoing)
plt.plot(*point,
marker="o", markersize=10, markeredgecolor="k",
markerfacecolor="red",
zorder=1)
plt.show()
什么决定了箭头的方向?哇,谢谢!这很好:)当我找到你的答案时,我也在尝试箭袋情节,所以我添加了它作为另一个答案。谢谢