如何在Matplotlib绘制的二次函数图中添加最小值点?
找到二次函数最小值点并在图中标记的解决方法
错误原因分析
你尝试的代码里,x[np.argmin(x)]是错误的——它取的是x数组自身的最小值(也就是-5),而非y取最小值时对应的x值。正确逻辑应该是先找到y最小值对应的索引,再用该索引获取对应的x坐标。
两种可行解决方案
方案1:基于采样数组查找最小值点
利用np.argmin(y)定位y数组最小值的索引,再通过索引获取对应的x、y值,最后用散点图标记:
import numpy as np import matplotlib.pyplot as plt x = np.linspace(-5, 5, 100) y = x*x - 2*x + 23 # 绘制二次函数曲线 plt.plot(x, y) # 修正标题(原标题函数式与实际计算不一致,已统一) plt.title("\nQuadratic Function: y=x² - 2x + 23\n", fontsize=16, weight="bold", color = "red") # 设置坐标轴标签 plt.xlabel("X", fontsize = 10, weight="bold", color="red") plt.ylabel("Y", fontsize = 10, weight="bold", color="red") # 查找并标记最小值点 min_index = np.argmin(y) xmin = x[min_index] ymin = y[min_index] plt.scatter(xmin, ymin, color="lightgreen", s=100, label=f"Min Point ({xmin:.2f}, {ymin:.2f})") plt.legend() # 显示最小值点标注 # 添加网格 plt.grid() # 展示图像 plt.show() # 打印最小值点坐标 print(f"最小值点坐标:({xmin:.2f}, {ymin:.2f})")
方案2:用二次函数解析公式计算(更准确)
对于标准二次函数y=ax²+bx+c,最小值点的x坐标为x = -b/(2a),代入函数即可得到y值。这种方法不受采样点数量影响,结果更精准:
import numpy as np import matplotlib.pyplot as plt x = np.linspace(-5, 5, 100) a, b, c = 1, -2, 23 y = a*x**2 + b*x + c # 绘制二次函数曲线 plt.plot(x, y) # 设置标题 plt.title("\nQuadratic Function: y=x² - 2x + 23\n", fontsize=16, weight="bold", color = "red") # 设置坐标轴标签 plt.xlabel("X", fontsize = 10, weight="bold", color="red") plt.ylabel("Y", fontsize = 10, weight="bold", color="red") # 用公式计算最小值点 xmin = -b/(2*a) ymin = a*xmin**2 + b*xmin + c plt.scatter(xmin, ymin, color="lightgreen", s=100, label=f"Min Point ({xmin:.2f}, {ymin:.2f})") plt.legend() # 添加网格 plt.grid() # 展示图像 plt.show() # 打印最小值点坐标 print(f"最小值点坐标:({xmin:.2f}, {ymin:.2f})")
额外提示
- 注意统一标题里的函数表达式与实际计算的式子,避免混淆;
- 调整
plt.scatter的s参数可以改变标记点的大小,label配合plt.legend()能清晰展示最小值点的坐标信息。
内容的提问来源于stack exchange,提问作者Evelina N
相关产品推荐
相关产品推荐

