如何使用plt绘制拟合抛物线与对应离散数据点
实现代码
你可以直接用以下代码完成绘制,核心逻辑是先生成足够密集的横坐标点计算抛物线值,再分别绘制散点和折线:
import numpy as np import matplotlib.pyplot as plt # 你已有的数据 points = np.asarray([[1,10],[2,5.49],[3,0.89],[4,-0.14],[5,-1.07],[6,0.84]]) points_x_axis = points[:, 0] points_y_axis = points[:, 1] # 拟合系数 matrix = np.array([[ 0.83535714],[-7.74778571],[17.116 ]]) a, b, c = matrix.flatten() # 生成密集的x值用于绘制平滑抛物线,范围覆盖原始x的取值区间 x_smooth = np.linspace(points_x_axis.min(), points_x_axis.max(), 100) # 计算抛物线对应的y值 y_smooth = a * x_smooth ** 2 + b * x_smooth + c # 绘制原始离散点,用红色圆点标注,添加标签用于图例 plt.scatter(points_x_axis, points_y_axis, color='red', label='原始离散点') # 绘制拟合抛物线,用蓝色实线,添加标签 plt.plot(x_smooth, y_smooth, color='blue', label='拟合抛物线') # 添加辅助显示元素 plt.xlabel('x') plt.ylabel('y') plt.legend() plt.title('离散点与二次拟合抛物线对比') # 显示图像 plt.show()
关键操作说明
- 不能直接用原始离散的x值绘制抛物线,会导致折线生硬不够平滑,所以用
np.linspace生成100个连续的密集x点 - 用
flatten()把二维的系数矩阵转为一维数组,方便直接提取三个系数 - 分别调用
plt.scatter()绘制散点、plt.plot()绘制拟合线,添加label参数后调用plt.legend()可以显示图例区分两种图形
内容的提问来源于stack exchange,提问作者vesii
相关产品推荐
相关产品推荐

