Matplotlib: "Неизвестная проекция" 3d "
Я только что установил matplotlib и пытаюсь запустить один из примеров сценариев. Однако я столкнулся с ошибкой, подробно описанной ниже. Что я делаю не так?
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.gca(projection='3d')
X, Y, Z = axes3d.get_test_data(0.05)
cset = ax.contour(X, Y, Z, 16, extend3d=True)
ax.clabel(cset, fontsize=9, inline=1)
plt.show()
Ошибка
Traceback (most recent call last):
File "<string>", line 245, in run_nodebug
File "<module1>", line 5, in <module>
File "C:\Python26\lib\site-packages\matplotlib\figure.py", line 945, in gca
return self.add_subplot(111, **kwargs)
File "C:\Python26\lib\site-packages\matplotlib\figure.py", line 677, in add_subplot
projection_class = get_projection_class(projection)
File "C:\Python26\lib\site-packages\matplotlib\projections\__init__.py", line 61, in get_projection_class
raise ValueError("Unknown projection '%s'" % projection)
ValueError: Unknown projection '3d'
Ответы
Ответ 1
Прежде всего, я думаю, что mplot3D
работал немного иначе в matplotlib
версии 0.99
чем в текущей версии matplotlib
.
Какую версию вы используете? (Попробуйте запустить: python -c 'import matplotlib; print matplotlib."__version__")
Я предполагаю, что вы работаете с версией 0.99
, и в этом случае вам нужно будет использовать немного другой синтаксис или обновить его до более поздней версии matplotlib
.
Если вы используете версию 0.99
, попробуйте сделать это вместо использования аргумента ключевого слова projection
:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d, Axes3D #<-- Note the capitalization!
fig = plt.figure()
ax = Axes3D(fig) #<-- Note the difference from your original code...
X, Y, Z = axes3d.get_test_data(0.05)
cset = ax.contour(X, Y, Z, 16, extend3d=True)
ax.clabel(cset, fontsize=9, inline=1)
plt.show()
Это должно работать и в matplotlib
1.0.x
, а не только в 0.99
.
Ответ 2
Просто чтобы добавить к Джо Кингтон ответ (недостаточно репутации для комментария), есть хороший пример смешивания 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)
Ответ 3
Я сталкиваюсь с той же проблемой, и @Joe Kington и ответ @bvanlew решают мою проблему.
но я должен добавить больше информации, когда вы используете pycharm и включаете auto import
.
Когда вы форматируете код, код from mpl_toolkits.mplot3d import Axes3D
, автоматически удаляется с помощью pycharm.
Итак, мое решение
from mpl_toolkits.mplot3d import Axes3D
Axes3D = Axes3D # pycharm auto import
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
и это работает хорошо!
Ответ 4
Попробуй это:
import matplotlib.pyplot as plt
import seaborn as sns
from mpl_toolkits.mplot3d import axes3d
fig=plt.figure(figsize=(16,12.5))
ax=fig.add_subplot(2,2,1,projection="3d")
a=ax.scatter(Dataframe['bedrooms'],Dataframe['bathrooms'],Dataframe['floors'])
plt.plot(a)
Ответ 5
Импортируйте mplot3d целое, чтобы использовать "projection = '3d'".
Вставьте команду ниже в верхней части вашего сценария. Это должно работать нормально.
from mpl_toolkits import mplot3d