Обратите внимание, что matplotlib не полностью 3D. Чтобы получить достаточную скорость для сложных сюжетов, 3D моделирует рисование всего на заднем плане, причем каждый элемент рисуется целиком на определенной глубине c. Если вам нужно полное 3D, стоит изучить такие пакеты, как mayavi .
Чтобы получить красную линию внутри спирали, используя matplotlib, можно использовать следующий подход:
- нарисуйте спираль
- нарисуйте красную линию
- снова нарисуйте спираль, но только ту часть, которая будет перед линией
Обратите внимание, что такой подход работает только в том случае, если вы не поворачиваете изображение слишком сильно и не используете прозрачность.
Теперь, чтобы нарисовать только часть кривой, стандартный способ использует numpy массивы в маске . Но они, кажется, не соблюдаются 3D-сюжетом. Альтернативой является установка нежелательных точек на NaN
.
. Чтобы лучше продемонстрировать подход, код ниже dr aws красная линия намного шире и использует зеленый цвет для части спирали перед линией. , На самом деле, спираль и частичная спираль будут использовать одинаковые цвета.
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.gca(projection='3d')
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)
ax.plot(x, y, z, label='parametric curve') # the full spiral
ax.plot([-1,-1], # x
[2,2], # y
[-2, 2], c='red', lw=10)
ym = np.copy(y)
ym[y > 0] = np.NaN
ax.plot(x, ym, z, color='lime') # partial spiral
plt.show()