python - change - Hay una clase matplotlib.axes.AxesSubplot, pero el módulo matplotlib.axes no tiene ningún atributo AxesSubplot
plt axis() python (1)
Heh Esto se debe a que no hay clase AxesSubplot
... hasta que se necesita una, cuando se construye desde SubplotBase
. Esto se hace con magia en axes.py
:
def subplot_class_factory(axes_class=None):
# This makes a new class that inherits from SubplotBase and the
# given axes_class (which is assumed to be a subclass of Axes).
# This is perhaps a little bit roundabout to make a new class on
# the fly like this, but it means that a new Subplot class does
# not have to be created for every type of Axes.
if axes_class is None:
axes_class = Axes
new_class = _subplot_classes.get(axes_class)
if new_class is None:
new_class = new.classobj("%sSubplot" % (axes_class.__name__),
(SubplotBase, axes_class),
{''_axes_class'': axes_class})
_subplot_classes[axes_class] = new_class
return new_class
Así que está hecho sobre la marcha, pero es una subclase de SubplotBase
:
>>> import matplotlib.pyplot as plt
>>> fig = plt.figure()
>>> ax = fig.add_subplot(111)
>>> print type(ax)
<class ''matplotlib.axes.AxesSubplot''>
>>> b = type(ax)
>>> import matplotlib.axes
>>> issubclass(b, matplotlib.axes.SubplotBase)
True
El código
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
print type(ax)
da la salida
<class ''matplotlib.axes.AxesSubplot''>
Entonces el codigo
import matplotlib.axes
matplotlib.axes.AxesSubplot
plantea la excepción
AttributeError: ''module'' object has no attribute ''AxesSubplot''
Para resumir, hay una clase matplotlib.axes.AxesSubplot
, pero el módulo matplotlib.axes
no tiene ningún atributo AxesSubplot
. ¿Qué diablos está pasando?
Estoy usando Matplotlib 1.1.0 y Python 2.7.3.