установить соотношение сторон 3D-графика matplotlib?

import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D 

Настройка соотношения сторон работает для 2d-графиков:

 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-кода, или он не реализован?

  • Поиск локальных IP-адресов с использованием stdlib Python
  • Python, как удалить пробелы из текстовых узлов XML
  • Какова наилучшая практика для написания поддерживаемых веб-скребок?
  • OpenCV putText () новый символ строки
  • Будет ли литерал Python dict быть оценен в том порядке, в котором он написан?
  • Сравнение двух массивов numpy для равенства, по элементам
  • Как найти множество наиболее часто встречающихся пар слов в файле с помощью python?
  • ImportError: Ошибка загрузки DLL: указанный модуль не найден
  • 5 Solutions collect form web for “установить соотношение сторон 3D-графика matplotlib?”

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

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

     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) 

    Если вы знаете границы, например. + -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') 

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

     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 увеличивает размер фигуры. Ярлыки и т. Д. Не будут увеличиваться, поэтому это способ сделать граф менее загроможден ярлыками.

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

     ax.auto_scale_xyz([minbound, maxbound], [minbound, maxbound], [minbound, maxbound]) 
    Python - лучший язык программирования в мире.