如何提取matplotlib中plt.plot生成折线图的插值点x/y坐标
解决方案
matplotlib绘制折线时,原始点之间的线段默认采用线性插值计算路径,你可以通过以下两种方式获取插值后的坐标:
方法1:手动计算线性插值(推荐,灵活度高)
直接使用numpy内置的线性插值方法,和matplotlib绘图的插值逻辑完全一致,可自定义插值密度:
import matplotlib.pyplot as plt import numpy as np # 原始数据 x = np.arange(5, 46, 5) y = np.array([1.60,1.56,1.54,1.53,1.53,1.58,1.70,1.97,2.68]) # 自定义生成需要插值的x坐标,示例为步长1的所有连续x值 x_interp = np.arange(x.min(), x.max() + 1, 1) # 线性插值计算对应y值 y_interp = np.interp(x_interp, x, y) # 验证插值点和原折线完全重合 plt.plot(x, y, label="原始折线", alpha=0.5) plt.scatter(x_interp, y_interp, c="red", s=10, label="插值点") plt.legend() plt.show() # 打印所有插值点坐标 for xi, yi in zip(x_interp, y_interp): print(f"x={xi:.2f}, y={yi:.4f}")
你可以按需调整x_interp的生成规则,比如设置每个原始点之间插入固定数量的点,或者指定总插值点数。
方法2:从绘图对象获取渲染坐标
如果你需要获取画布渲染后的实际像素坐标,可以直接从plt.plot返回的Line2D对象中提取:
line, = plt.plot(x, y) # 把数据坐标系的坐标转换为画布像素坐标 pixel_coords = line.get_transform().transform(line.get_xdata()) x_pixel, y_pixel = pixel_coords.T
该方法返回的是像素级坐标,如果你需要的是原始数据坐标系下的插值点,优先使用方法1。
内容的提问来源于stack exchange,提问作者user399840
相关产品推荐
相关产品推荐

