Matplotlib: ошибка «Неизвестная проекция« 3d »» - PullRequest
101 голосов
/ 28 сентября 2010

Я только что установил 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'

Ответы [ 5 ]

98 голосов
/ 28 сентября 2010

Во-первых, я думаю, 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.

52 голосов
/ 09 октября 2014

Просто добавьте к ответу Джо Кингтона (недостаточно репутации для комментария), есть хороший пример смешивания 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)

2 голосов
/ 13 января 2019

Я столкнулся с той же проблемой, и ответ @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')

, и оно работает хорошо!

0 голосов
/ 20 июня 2019

Импортируйте mplot3d целое, чтобы использовать "projection = '3d'".

Вставьте команду ниже в верхней части вашего скрипта. Он должен работать нормально.

from mpl_toolkits import mplot3d
0 голосов
/ 04 мая 2019

Попробуйте это:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...