установить matplotlib 3d-формат изображения? - PullRequest
32 голосов
/ 15 ноября 2011
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

Настройка соотношения сторон работает для двухмерных сюжетов:

ax = plt.axes()
ax.plot([0,1],[0,10])
ax.set_aspect('equal','box')

Но не для 3D:

ax = plt.axes(projection='3d')
ax.plot([0,1],[0,1],[0,10])
ax.set_aspect('equal','box')

Есть ли другой синтаксис для случая 3d или он не реализован?

Ответы [ 5 ]

21 голосов
/ 08 октября 2013

Я не пробовал все эти ответы, но этот клудж сделал это для меня:

def axisEqual3D(ax):
    extents = np.array([getattr(ax, 'get_{}lim'.format(dim))() for dim in 'xyz'])
    sz = extents[:,1] - extents[:,0]
    centers = np.mean(extents, axis=1)
    maxsize = max(abs(sz))
    r = maxsize/2
    for ctr, dim in zip(centers, 'xyz'):
        getattr(ax, 'set_{}lim'.format(dim))(ctr - r, ctr + r)
15 голосов
/ 11 сентября 2012

Похоже, эта функция с тех пор была добавлена, поэтому я подумал, что я добавлю ответ для людей, которые придут по этой теме в будущем, как я:

fig = plt.figure(figsize=plt.figaspect(0.5)*1.5) #Adjusts the aspect ratio and enlarges the figure (text does not enlarge)
ax = fig.gca(projection='3d')

figaspect(0.5) делает цифру вдвое большеширокий, как высокий.Затем *1.5 увеличивает размер фигуры.Ярлыки и т. Д. Не будут увеличиваться, поэтому это позволяет сделать график менее загроможденным метками.

11 голосов
/ 19 февраля 2012

Если вы знаете границы, например.+ -3 по центру (0,0,0), вы можете добавить невидимые точки, как это:

import numpy as np
import pylab as pl
from mpl_toolkits.mplot3d import Axes3D
fig = pl.figure()
ax = fig.gca(projection='3d')
ax.set_aspect('equal')
MAX = 3
for direction in (-1, 1):
    for point in np.diag(direction * MAX * np.array([1,1,1])):
        ax.plot([point[0]], [point[1]], [point[2]], 'w')
7 голосов
/ 12 ноября 2013

Если вы знаете границы, вы также можете установить соотношение сторон следующим образом:

ax.auto_scale_xyz([minbound, maxbound], [minbound, maxbound], [minbound, maxbound])
3 голосов
/ 15 ноября 2011

Насколько я понимаю, в основном это еще не реализовано. Я также надеюсь, что это скоро будет осуществлено. См. Эта ссылка для возможного решения (я сам не проверял).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...