Matplotlib中mlines.Line2D线条位置错误问题求助
解决Matplotlib折线绘制异常的问题
我一眼就发现问题出在哪啦!你写的newline函数里,mlines.Line2D的参数传错了——这个类需要的是两个数组:第一个是这条线上所有点的x坐标集合,第二个是对应的y坐标集合,而不是把单个点的[x,y]直接当成两个参数传进去。
举个例子,你传p1=[19,11]和p2=[65,56]时,Matplotlib会把[19,11]当成x轴的两个值,[65,56]当成对应的y轴值,画出来的是从(19,65)到(11,56)的线,完全不是你想要的从(19,11)到(65,56)的连线!
修正后的代码
只需要把两个点的x、y坐标分别提取出来,再传给Line2D就可以了:
def newline(p1, p2): ax = plt.gca() # 提取两个点的x坐标和y坐标 x_coords = [p1[0], p2[0]] y_coords = [p1[1], p2[1]] l = mlines.Line2D(x_coords, y_coords) ax.add_line(l) return l
完整可运行示例
为了让你直接看到效果,我把整个流程写好,包括绘制点标记(更直观)和设置图表范围:
import matplotlib.pyplot as plt import matplotlib.lines as mlines def newline(p1, p2): ax = plt.gca() x_coords = [p1[0], p2[0]] y_coords = [p1[1], p2[1]] l = mlines.Line2D(x_coords, y_coords) ax.add_line(l) return l # 设置图表范围,确保所有点都能显示出来 plt.xlim(0, 70) plt.ylim(0, 60) # 你的点对列表 point_pairs = [ ([19, 11], [65, 56]), ([19, 11], [52, 31]), ([65, 56], [52, 31]) ] # 遍历绘制每条线,同时画出点标记 for p1, p2 in point_pairs: newline(p1, p2) plt.scatter(p1[0], p1[1], color='red', s=50) plt.scatter(p2[0], p2[1], color='red', s=50) plt.show()
运行这段代码后,你就能看到三条线正确连接了你指定的点对,红色的点标记也能帮你更清楚地确认线的连接关系。
内容的提问来源于stack exchange,提问作者artie
相关产品推荐
相关产品推荐

