如何在Matplotlib中绘制穿过两点的无限延伸直线(支持对数刻度)
问题解决:Matplotlib绘制跨边界的无限延伸直线
开发场景
我正在开发一个Python API,为前端Angular应用生成图表和切线。用户可拖动点调整曲线的垂线,确认效果符合预期后,通过Matplotlib导出图表。
当前问题与尝试
目前使用以下代码绘制两点间的线段:
x_values = [tangent.point1.x, tangent.point2.x] y_values = [tangent.point1.y, tangent.point2.y] plt.plot(x_values, y_values, scalex=False, scaley=False)
得到的线段仅在两点之间显示(仅覆盖用户设置的两个点范围),但需求是让线段延伸至绘图边界,哪怕用户设置的两点未与边界相交。
我尝试过两种方案但均失败:
- 将两点转换为直线方程,计算与绘图边界的交点,未成功
- 使用
np.linspace(xMin, xMax, 100)生成点,结果得到指数曲线(非预期直线)
利用axline的解决过程
之前在其他帖子了解到ax.axline(p1, p2)可绘制无限延伸直线,但该方法没有scalex和scaley参数。按照帖子建议先保存坐标轴刻度范围,绘图后再设置xlim和ylim,结果直线不可见。
后来发现是参数传递错误:误将p1传为(p1.x, p2.x),正确的传递方式应为每个点传入(x坐标, y坐标)元组,修正后直线恢复可见,且能延伸至绘图边界。
最终可行代码示例
# 获取当前坐标轴对象 ax = plt.gca() # 构造正确的两点坐标(每个点为(x, y)元组) point1 = (tangent.point1.x, tangent.point1.y) point2 = (tangent.point2.x, tangent.point2.y) # 绘制无限延伸直线 ax.axline(point1, point2) # 保持原有坐标轴刻度范围,避免自动缩放 current_xlim = plt.xlim() current_ylim = plt.ylim() ax.set_xlim(current_xlim) ax.set_ylim(current_ylim)
内容的提问来源于stack exchange,提问作者Wessel van Leeuwen
相关产品推荐
相关产品推荐

