You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:23:33