Python绘制桁架模型时图形异常,求助排查错误原因
桁架绘图代码的错误分析与修正
核心错误点
1. 节点索引不匹配(图形异常的关键原因)
你的elementsmat里的节点编号是从1开始的整数,但Python列表的索引是从0开始的。比如单元里的节点1对应nodesmat的第一个元素(索引0),但你直接用bars[i][0]作为索引去取nodes_xy的元素,相当于把节点1当成了索引1(对应nodesmat的第二个元素),这会导致所有杆件的连接节点完全错位,图形自然异常。
2. 图例设置错误
你用line.set_label=lg是错误的赋值方式,正确的调用方法是line.set_label(lg)。而且当前循环里每次都会覆盖line变量,最终只有最后一根杆件会被设置图例,无法正确显示整体的图例。
3. 缺少图形显示语句
代码最后没有调用plt.show(),运行后不会弹出绘图窗口,可能误以为图形生成失败。
修正后的代码
import matplotlib.pyplot as plt elementsmat=[[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]] nodesmat= [[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]] bars=[] for i in range(len(elementsmat)): # 将1-based节点编号转换为0-based列表索引 bars.append([x-1 for x in elementsmat[i][1:]]) print(bars) def image(nodes, c, lt, lw, lg): nodes_xy=[] for j in range(len(nodes)): nodes_xy.append(nodes[j][1:]) print(nodes_xy) # 循环绘制杆件,仅在第一次绘制时设置图例 for i in range(len(bars)): xi, xf = nodes_xy[bars[i][0]][0], nodes_xy[bars[i][1]][0] yi, yf = nodes_xy[bars[i][0]][1], nodes_xy[bars[i][1]][1] line, = plt.plot([xi,xf],[yi,yf], color=c, linestyle=lt, linewidth=lw, label=lg if i==0 else "") plt.legend(prop={'size':8}) # 显示图形窗口 plt.show() image(nodesmat, 'gray', '--', 1, 'not deformed')
修正说明
- 索引适配:生成
bars列表时,将每个节点编号减1,把1开头的节点编号转换为Python列表的0起始索引,确保杆件连接到正确的节点坐标。 - 图例修复:在
plt.plot()中直接指定label,仅在第一次循环时设置图例文本,避免重复设置导致的异常。 - 添加显示语句:调用
plt.show()确保绘图窗口正常弹出,展示正确的桁架图形。
内容的提问来源于stack exchange,提问作者user20276952
相关产品推荐
相关产品推荐

