Каждая созданная вами функция имеет свойство, называемое 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__
Надеюсь, это имеет смысл.
Во-первых, я думаю, что 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.
Чтобы добавить к ответу Джо Кингтона (недостаточно репутации для комментария), есть хороший пример смешивания 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)
ax = fig.gca(projection='3d')
работает для меня. Вместо ax = plt.subplot(111,projection="3d")
. Я использую версию 2.1.0
– Victor John
13 October 2017 в 02:16
from mpl_toolkits.mplot3d import Axes3D
. Впоследствии он должен работать. – Joe Kington 24 April 2013 в 03:46python -c 'import matplotlib; print(matplotlib.__version__)'
– Charlie Parker 5 September 2017 в 21:062.0.2
? – Charlie Parker 5 September 2017 в 21:06