为何未从matplotlib.pyplot导入pcolormesh仍可正常使用?
为什么不用导入pyplot的pcolormesh也能调用?
嘿,这个问题问得特别好!刚接触matplotlib的时候,确实很容易被它的两种不同接口搞懵,我来给你掰扯清楚:
你现在用的是matplotlib的面向对象(OO)接口,而之前习惯的是pyplot的状态机接口,这俩的调用逻辑完全不一样:
- 之前你用的
plt.pcolormesh(),是调用matplotlib.pyplot模块里的函数,这种方式属于「状态机」—— pyplot会自动追踪当前活跃的绘图区域(Axes),然后把图画在那里,所以你需要先导入pyplot模块才能用这个函数。 - 而现在你写的
fig.add_subplot(111).pcolormesh(),这里的fig.add_subplot(111)返回的是一个AxesSubplot对象(也就是具体的绘图区域实例),pcolormesh本身就是这个Axes类的内置方法,所以根本不需要从pyplot里单独导入,直接通过这个实例调用就行。
举个更清晰的对比:
# 状态机方式(需要导入pyplot) import matplotlib.pyplot as plt plt.figure() plt.pcolormesh(data) # 面向对象方式(不需要pyplot的pcolormesh) from matplotlib.figure import Figure fig = Figure() axes = fig.add_subplot(111) axes.pcolormesh(data)
其实matplotlib里绝大多数绘图函数都有这两种形式:pyplot模块里的函数是给新手快速绘图用的快捷方式,而Axes对象的方法是更灵活的面向对象写法,尤其适合你现在做的GUI嵌入场景——因为GUI里通常需要明确控制每个绘图对象,而不是依赖pyplot的自动状态追踪。
内容的提问来源于stack exchange,提问作者Jeremy
相关产品推荐
相关产品推荐

