gpt4 book ai didi

python - 在 Python 中创建类似网络的图形桁架

转载 作者:行者123 更新时间:2023-12-01 22:51:49 24 4
gpt4 key购买 nike

我想创建一个桁架的图形。我有两个列表列表;一个给出了条形编号和构成它们的节点,它看起来像这样:

elements = [[1, 1, 2], [2, 2, 3], [3, 3, 4], [4, 4, 5], [5, 5, 1], [6, 1, 4], [7, 2, 4], [8, 4, 6], [9, 6, 5]]

例如,元素一由节点 1 和节点 2 组成。另一个数据集给出了节点及其在二维平面中的坐标。它看起来像这样:

nodes= [[1.0, 0.0, 1.2], [2.0, -1.5, 1.2], [3.0, -1.5, 0.0], [4.0, 0.0, 0.0], [5.0, 1.5, 1.2], [6.0, 1.5, 0.0]]

例如,节点 1 的坐标为 (0.0, 1.2)。

我想使用上面的列表通过 pyplot 重新创建以下图形。其中 A 为 1.5m,B 为 1.2m。

Example of required image

我想做这样的事情:

def draw(nodes):
draw1=[]
for i in range(len(nodes)):
for j in range(len(nodes[1])):
mmc+=[(nodes[i][j][1][1],nodes[i][j][1][2])]
for t in [draw1]:
xs1, ys1 = zip(*t)
plot(xs1, ys1, 'o')
plot(xs1, ys1, '-')
plot.show()

我知道我做的不对(超出索引),但我真的不知道如何解决它。

最佳答案

enter image description here

你的问题太宽了,我只回答第一部分,给定节点坐标和连通性列表,如何绘制桁架?

首先,如果您正在实现桁架分析程序,您可能会使用 dataclass并存储更多关于每个条形图的信息,但作为初学者,我们只需要连接,我写道:

In [8]: class Bar():
...: def __init__(self, i, j):
...: self.i = i
...: self.j = j

接下来,节点坐标列表和条形列表

In [9]: node_xy = [[0,0], [1,2], [2,0], [3,2], [4,0]]
...:
...: bars = [Bar(0,1), Bar(1,2), Bar(2,3), Bar(3,4),
...: Bar(0,2), Bar(2,4),
...: Bar(1,3)]

绘图,抽象在一个函数中

In [10]: def graph(node_xy, bars, figsize=(8,8)):
...: from matplotlib.ticker import MultipleLocator as ml
...: from matplotlib.pyplot import annotate, subplots, show
...: fig, ax = subplots(figsize=figsize, layout='constrained')
...: ax.scatter(*zip(*node_xy), s=90, zorder=8, color='w', edgecolor='k')
...: for bar in bars:
...: xi, yi = node_xy[bar.i]
...: xj, yj = node_xy[bar.j]
...: ax.plot((xi, xj), (yi, yj), color='b', lw=2.5, zorder=6)
...: for s in ax.spines.values() : s.set_visible(0)
...: ax.xaxis.set_major_locator(ml(xmajor))
...: ax.xaxis.set_minor_locator(ml(xminor))
...: ax.yaxis.set_major_locator(ml(ymajor))
...: ax.yaxis.set_minor_locator(ml(yminor))
...: ax.tick_params(length=0, axis='both', which='both')
...: ax.grid(1)
...: ax.grid(1, 'minor', color='#ddeeff')
...: ax.set_aspect(1)
...: show()
...: return fig, ax

最后,我们执行我们的函数

In [11]: xmajor, xminor = 2, .5
...: ymajor, yminor = 2, .5
...: fig, ax = graph(node_xy, bars, figsize=(8,4))

以上对您有帮助吗?

因为我不会扩展我的答案,如果你不能从这个起点开始,那么你应该问更多、更有针对性的问题。

关于python - 在 Python 中创建类似网络的图形桁架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74155713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com