У меня есть некоторый код, который создает трехмерную диаграмму рассеяния, используя scatter
в matplotlib в сочетании с tight_layout
, см. Упрощенный код ниже:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import proj3d
fig = plt.figure()
ax = fig.gca(projection='3d')
N = 100
x = np.random.random(N)
y = np.random.random(N)
z = np.random.random(N)
ax.scatter(x, y, z)
plt.tight_layout() # <-- Without this, everything is fine
plt.savefig('scatter.png')
В matplotlib 2.2.3 это выглядит какитак:
Аналогичные выходные данные генерируются более старыми версиями, по крайней мере, до версии 1.5.1.При использовании новой версии 3.0.0 что-то идет не так в plt.tight_layout()
, и я получаю следующий вывод:
Сопровождающее это предупреждение
... / matplotlib / inj_layout.py: 177: UserWarning: Левые и правые поля нельзя сделать достаточно большими, чтобы вместить все декорации осей
Можно утверждать, что использование tight_layout
безАргументы, приведенные здесь, не всегда (на старых matplotlibs) постоянно приводят к ожидаемым ужесточенным полям, и поэтому следует воздерживаться от использования tight_layout
с 3D-графиками.Однако ручная настройка аргументов на tight_layout
это (раньше) достойный способ обрезать поля даже на трехмерных графиках.
Я предполагаю, что это ошибка в matplotlib, но, возможно, ониЯ сделал некоторые преднамеренные изменения, которые я не заметил.Любые указатели о исправлении приветствуются.