原理考察:Matplotlib 的 pyplot 模块是基于状态机(State Machine)的。plt.figure() 会创建一个新的 Figure 并将其设为“当前(current)”Figure,随后的 plt.plot 等操作都会作用于这个“当前”Figure 的“当前”Axes。
代码分析:
plt.figure() 创建 Figure 1。
plt.plot 在 Figure 1 上绘图。
plt.legend() 在 Figure 1 上生成图例。
plt.figure() 再次调用,创建 Figure 2,并将其设为“当前”。此时焦点完全转移到 Figure 2,Figure 1 的状态(包括是否有图例)已固定。
plt.plot 在 Figure 2 上绘图。
代码中未对 Figure 2 调用 plt.legend()。
plt.show() 渲染所有创建的 Figure。
结论:Figure 1 有图例,Figure 2 没有图例。
错误选项分析:
A 错:plt.figure() 切换了上下文,新图不会自动继承旧图的图例对象(除非手动复制 artist,但这里没做)。
C 错:plt.figure() 会新建窗口/画布,不会将线条画在同一张图上(除非使用 plt.subplot 或不调用 plt.figure 直接在当前图追加)。
D 错:pyplot 的设计允许在不显式获取 axes 对象的情况下绘图,它会自动处理。