سؤال

أحاول رسم مسارات خطوط ثلاثية الأبعاد تتطور بمرور الوقت، وأود أن تتغير الألوان لإظهار مرور الوقت (على سبيل المثال.من الأزرق الفاتح إلى الأزرق الداكن).ومع ذلك، هناك نقص واضح في البرامج التعليمية لاستخدام matplotlib Line3DCollection; هذا هو الأقرب أستطيع أن أجد، ولكن كل ما أحصل عليه هو خط أبيض.

هذا هو الكود الخاص بي.

import matplotlib.pyplot as plot
from mpl_toolkits.mplot3d.axes3d import Axes3D
from mpl_toolkits.mplot3d.art3d import Line3DCollection
import numpy as np

# X has shape (3, n)
c = np.linspace(0, 1., num = X.shape[1])[::-1]
a = np.ones(shape = c.shape[0])
r = zip(a, c, c, a) # an attempt to make red vary from light to dark

# r, which contains n tuples of the form (r,g,b,a), looks something like this:
# [(1.0, 1.0, 1.0, 1.0), 
# (1.0, 0.99998283232330165, 0.99998283232330165, 1.0),
# (1.0, 0.9999656646466033, 0.9999656646466033, 1.0),
# (1.0, 0.99994849696990495, 0.99994849696990495, 1.0),
# ..., 
# (1.0, 1.7167676698312416e-05, 1.7167676698312416e-05, 1.0),
# (1.0, 0.0, 0.0, 1.0)]

fig = plot.figure()
ax = fig.gca(projection = '3d')

points = np.array([X[0], X[1], X[2]]).T.reshape(-1, 1, 3)
segs = np.concatenate([points[:-1], points[1:]], axis = 1)
lc = Line3DCollection(segs, colors = r)
ax.add_collection3d(lc)

ax.set_xlim(-0.45, 0.45)
ax.set_ylim(-0.4, 0.5)
ax.set_zlim(-0.45, 0.45)

plot.show()

ومع ذلك، إليك ما أحصل عليه:

3d temporal color change plot

مجرد مجموعة من الخطوط البيضاء، بدون تغيير في اللون.ما الخطأ الذي افعله؟شكرًا!

هل كانت مفيدة؟

المحلول

الكود الخاص بك يعمل بشكل جيد، إليك عينة صغيرة منه.في الأساس، هذا هو الكود الخاص بك مع مجموعة X مخصصة.

fig = plot.figure();
ax = fig.gca(projection = '3d')
X = [(0,0,0,1,0),(0,0,1,0,0),(0,1,0,0,0)]
points = np.array([X[0], X[1], X[2]]).T.reshape(-1, 1, 3)
r = [(1.0, 1.0, 1.0, 1.0), (1.0, 0.75, 0.75, 1.0), (1.0, 0.5, 0.5, 1.0), (1.0, 0.25, 0.25, 1.0), (1.0, 0.0, 0.0, 1.0)];

segs = np.concatenate([points[:-1], points[1:]], axis = 1)
ax.add_collection(Line3DCollection(segs,colors=list(r)))

plot.show()

والمؤامرة تبدو مثل هذا:

enter image description here

نصائح أخرى

واو ، لذلك اتضح أن المشكلة كانت في ذلك X كان في الواقع لا من الشكل (3, n), ، بل شيء من هذا القبيل (3, n^10), لكني كنت أتآمر فقط n النقاط، ومن ثم يبدو أن اللون لا يتغير أبدًا (ولماذا r يبدو أن الفواصل الزمنية صغيرة جدًا... كان هناك ما يقرب من 58000 نقطة عندما كنت أخطط لـ 250 نقطة فقط).

لذلك نعم، كان خطأ.اسف بشأن ذلك؛أنه يعمل بشكل جيد الآن.

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