Как построить коллекцию 3D-патчей в matplotlib?

Я пытаюсь создать Трехмерный график в matplotlib с тремя кругами на нем, каждый с центром в начале координат и радиусом 1, указывающими в разных направлениях - например, для иллюстрации сферы радиуса 1.

В 2D я бы сделал коллекцию участков круга и добавил его к осям. В 3D у меня возникают проблемы с тем, чтобы пятна вообще появлялись, не говоря уже о том, чтобы ориентировать их в разных направлениях.

import matplotlib
import matplotlib.pyplot as P
import mpl_toolkits.mplot3d as M3

fig = P.figure()
ax = fig.add_subplot(1, 1, 1, projection='3d')
circles = matplotlib.collections.PatchCollection(
    [matplotlib.patches.Circle((0, 0), 1) for count in range(3)],
    offsets=(0, 0))
M3.art3d.patch_collection_2d_to_3d(circles, zs=[0], zdir='z')
ax.add_collection(circles)
P.show()

Запуск этой программы заполняет все окно графика синим, то есть цветом лица участков, как бы я ни повернуть сюжет. Если я установил facecolor = 'none' в вызове PatchCollection () , то появится пустой Axes3D .

Что я пробовал:

  • Если я использую CircleCollection вместо PatchCollection , патчи не отображаются вообще.
  • Параметр zs в patch_collection_2d_to_3d ) звонок нечетный; Я ожидал бы поставить либо zs = 0 (одна координата z для всех трех участков), либо zs = [0,0,0] (отдельная координата z для каждого участка). ), но оба из них выдают ошибку:

    ValueError: установка элемента массива с последовательностью.

  • Чтобы по-другому ориентировать патчи, я бы ожидал, что смогу передать что-то вроде zdir = ['x ',' y ',' z '] , но результаты не отличаются, передаю ли я это или ' z ' или [' z '] .

  • I также ожидал, что сможет выполнить ax.add_collection3d (круги, zs = [0, 0, 0], zdir = ['x', 'y', 'z']) вместо преобразования коллекция патчей от 2d до 3d, но это тоже вызывает ошибку:

    AttributeError: объект 'Patch3DCollection' не имеет атрибута 'set_sort_zpos'

9
задан ptomato 10 June 2011 в 08:55
поделиться