这对我来说一直是一个混乱的来源:导入Axes3D
(这里只是某种python对象)似乎会改变一个不相关的函数add_subplot
来自不同的模块。怎么会发生这种情况?这不违反名称空间的整个想法吗?
我的意思是:
>>> import matplotlib.pyplot as plt
>>> f = plt.figure()
>>> ax = f.add_subplot(111, projection='3d')
# Fails with ValueError: Unknown projection '3d'
>>> from mpl_toolkits.mplot3d import Axes3D
>>> ax = f.add_subplot(111, projection='3d')
# Works!
起初我认为它类似于from __future__ import print_function
,然后以某种方式神奇地将一个名为print
的函数引入命名空间。但是as it turns out, 实际上是魔术,并且特定于__future__
模块。
那么,Axes3D如何运作?