KeyError: '3d' с использованием Matplotlib python [duplicate]

Каждая созданная вами функция имеет свойство, называемое prototype, и начинает свою жизнь как пустой объект. Это свойство бесполезно, пока вы не используете эту функцию в качестве функции конструктора, то есть с ключевым словом «новое».

Это часто путают с свойством __proto__ объекта. Некоторые могут запутаться и за исключением того, что свойство prototype объекта может получить их прото объекта. Но это не случай. prototype используется для получения __proto__ объекта, созданного из конструктора функций.

В приведенном выше примере:

function Person(name){
    this.name = name
}; 

var eve = new Person("Eve");

console.log(eve.__proto__ == Person.prototype) // true
// this is exactly what prototype does, made Person.prototype equal to eve.__proto__

Надеюсь, это имеет смысл.

72
задан Eric Lebigot 8 April 2012 в 14:10
поделиться

2 ответа

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

76
ответ дан Joe Kington 21 August 2018 в 13:14
поделиться
  • 1
    Я просто попытался, projection = '3d' не работал с 1.2.1 – dashesy 24 April 2013 в 03:16
  • 2
    @dashy - вам все равно нужно будет импортировать 3d-проекции: from mpl_toolkits.mplot3d import Axes3D. Впоследствии он должен работать. – Joe Kington 24 April 2013 в 03:46
  • 3
    ага, интересно! видел его в примерах, но догадывался, что он предназначен только для более старых версий. благодаря – dashesy 24 April 2013 в 03:49
  • 4
    команда для версии для python 3 - python -c 'import matplotlib; print(matplotlib.__version__)' – Charlie Parker 5 September 2017 в 21:06
  • 5
    как насчет версии 2.0.2? – Charlie Parker 5 September 2017 в 21:06

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

37
ответ дан bvanlew 21 August 2018 в 13:14
поделиться
  • 1
    Это действительно полезно знать! Хотя импорт Axes3D никогда не используется явно, он позволяет использовать проекцию = '3d' без ошибок – stoves 3 August 2016 в 14:04
  • 2
    Оператор импорта заставил меня работать. Но я не могу не чувствовать себя неловко, запустив этот код ... Использование инструкции import для загрузки кода, который выглядит полностью разделенным на поверхности, кажется плохим дизайном – Ezbob 18 January 2017 в 17:43
  • 3
    ax = fig.gca(projection='3d') работает для меня. Вместо ax = plt.subplot(111,projection="3d"). Я использую версию 2.1.0 – Victor John 13 October 2017 в 02:16
Другие вопросы по тегам:

Похожие вопросы: