Чтобы добавить к ответу Джо Кингтона (недостаточно репутации для комментария), есть хороший пример смешивания 2d и 3d графиков в документации по http://matplotlib.org/examples/mplot3d/mixed_subplots_demo. html , который показывает проекцию = '3d', работающую в сочетании с импортом Axes3D.
from mpl_toolkits.mplot3d import Axes3D
...
ax = fig.add_subplot(2, 1, 1)
...
ax = fig.add_subplot(2, 1, 2, projection='3d')
Фактически, пока присутствует импорт Axes3D, строка
from mpl_toolkits.mplot3d import Axes3D
...
ax = fig.gca(projection='3d')
, который используется OP также работает. (проверено с помощью matplotlib версии 1.3.1)
Я придумал решение, которое работает, но не красиво. Я использовал пакет https://github.com/hzdg/django-enumfields , чтобы помочь с этим.
Я создал свое собственное поле формы:
class EnumChoiceField(enumfields.forms.EnumChoiceField):
def __init__(self, enum, *, coerce=lambda val: val, empty_value='', **kwargs):
if isinstance(enum, six.string_types):
self.enum = import_string(enum)
else:
self.enum = enum
super().__init__(coerce=coerce, empty_value=empty_value, **kwargs)
И использовал его в моей форме Django. Затем в моем собственном AppConfig я сделал это:
class CoreAppConfig(AppConfig):
name = 'myapp.core'
def ready(self):
registry = get_global_registry()
@convert_form_field.register(EnumChoiceField)
def convert_form_field_to_enum(field: EnumChoiceField):
converted = registry.get_converted_field(field.enum)
if converted is None:
raise ImproperlyConfigured("Enum %r is not registered." % field.enum)
return converted(description=field.help_text, required=field.required)
И, наконец, в моей схеме:
UnitEnum = Enum.from_enum(Unit)
get_global_registry().register_converted_field(Unit, UnitEnum)
Мне действительно это не нравится, но я не мог придумать лучшего способа чтобы справиться с этим. Я столкнулся с этой идеей при поиске другой проблемы с графеновым джанго здесь https://github.com/graphql-python/graphene-django/issues/481#issuecomment-412227036 .
Я чувствую, что у есть , чтобы быть лучшим способом сделать это.