Я пытаюсь создать Трехмерный график в 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 ']
.
ax.add_collection3d (круги, zs = [0, 0, 0], zdir = ['x', 'y', 'z'])
вместо преобразования коллекция патчей от 2d до 3d, но это тоже вызывает ошибку:
AttributeError: объект 'Patch3DCollection' не имеет атрибута 'set_sort_zpos'