سؤال

أحاول رسم رسم صلب للثورة سلكية. أنا أتابع مثالًا على كرة هنا لكنني في حيرة. لقد قمت بتبسيط كل شيء ، لكنني عالق الآن على خطأ. أنا أيضًا أنظر إلى حجج الوظيفة الموصوفة هنا, ، لكن ما لم أكن أسيء فهم شيء ما ، يجب أن يكون هذا الرمز على ما يرام. أدرك أن ما أحاول رسمه هنا هو خط وليس شكلًا ، لكنني لا أفهم لماذا لا يمكنني استخدام هذه الطريقة لرسمها على أي حال. أحاول الحصول على هذا المثال بسيط قدر الإمكان حتى أتمكن من الانتقال إلى رسم صلب فعلي. ها هو:

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plot
import numpy
import pylab

fig = plot.figure()
ax = Axes3D(fig)

n = numpy.linspace(0, 100)

x = n
y = x**2
z = 1
ax.plot_wireframe(x, y, z)

plot.show()

هذا هو الخطأ:

Traceback (most recent call last):
  File "test.py", line 14, in <module>
    ax.plot_wireframe(x, y, z)
  File "/usr/lib/pymodules/python2.6/mpl_toolkits/mplot3d/axes3d.py", line 687, in plot_wireframe
    rows, cols = Z.shape
AttributeError: 'int' object has no attribute 'shape'
هل كانت مفيدة؟

المحلول

عندما يكتب Matplotlib وسيطات البيانات في الحروف الرأسمالية ، فإن هذا يعني أنها تتوقع مصفوفات البيانات. يمكنك استعمال ال meshgrid وظيفة (انظر مثال على mplot3d) لتوليد الشبكة.

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plot
import numpy
import pylab

fig = plot.figure()
ax = Axes3D(fig)

n = numpy.linspace(0, 100)

x = n
y = x**2

X, Y = numpy.meshgrid(x, y)
Z = numpy.ones_like( X )

ax.plot_wireframe(X, Y, Z)

لاحظ أنه في المثال الذي قدمته ، يتم إنشاء نقاط الشبكة للمجال باستخدام المنتج الخارجي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top