使用Matplotlib绘制完全图(正方形、蛛网图)时结果不符合预期的问题
解决Matplotlib绘制完全图的异常问题
嘿,我一眼就看出你代码里的问题啦!你离正确结果只差一步——plt.plot()的参数传递方式错了,咱们来一步步修正:
问题根源
你当前的代码里,x = points[i]和y = points[j]拿到的是单个点的(x,y)元组,而plt.plot()需要的是两个点的x坐标组成的列表和两个点的y坐标组成的列表。举个例子,当你想画点(0,0)和(1,0)之间的连线时,应该传给plt.plot()的是[0,1](x坐标)和[0,0](y坐标),而不是(0,0)和(1,0)。
修正后的完整代码
import numpy as np import matplotlib.pyplot as plt alpha = (np.sqrt(2)/2) square_points = ((0, 0),(1, 0),(0, 1),(1, 1)) shape_points = ((1, 0),(alpha, alpha),(0, 1),(-alpha, alpha),(-1, 0),(-alpha, -alpha),(0, -1),(alpha, -alpha)) def complete_graph(points): # 遍历所有点对(i,j),i>j避免重复画同一条线 for i in range(len(points)): for j in range(i): # 提取两个点的x坐标和y坐标 x_coords = [points[i][0], points[j][0]] y_coords = [points[i][1], points[j][1]] # 绘制两点之间的连线,可选添加样式让图更清晰 plt.plot(x_coords, y_coords, color='gray', linewidth=1) # 设置坐标轴比例一致,避免图形变形 plt.axis('equal') plt.show() complete_graph(square_points) # 正方形完全图(含对角线) complete_graph(shape_points) # 蛛网形状的完全图
额外优化说明
- 加上
plt.axis('equal')可以让x轴和y轴的比例一致,保证正方形不会被拉伸成长方形,蛛网形状也不会变形。 - 给
plt.plot()加上color和linewidth参数,能让连线看起来更整洁,避免线条重叠后太杂乱。
现在运行代码,你就能得到预期的完全图啦!
内容的提问来源于stack exchange,提问作者fredericoamigo
相关产品推荐
相关产品推荐

