Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中绘制二维方形原子晶格的最佳方法?_Python_Python 3.x_Networkx_Physics - Fatal编程技术网

在Python中绘制二维方形原子晶格的最佳方法?

在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() 这就产生了以下内容,而这正是我所想的。这里是一个使用

问题摘要: 我正在研究一个物理问题,我想画一个二维原子晶格,其中的节点用箭头连接,如图所示

我所尝试的: 我曾尝试使用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()

这就产生了以下内容,而这正是我所想的。

这里是一个使用
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()

什么决定了箭头的方向?哇,谢谢!这很好:)当我找到你的答案时,我也在尝试箭袋情节,所以我添加了它作为另一个答案。谢谢