LINUX.ORG.RU

Специалистам по matplotlib: tight_layout не работает с plot_surface?

 ,


0

1

Решил построить поверхность при помощи matplotlib вот так:

import numpy as np

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

x = np.linspace(0, 10, 256)
y = np.linspace(0, 4, 128)

XX, YY = np.meshgrid(x, y)
ZZ = XX * YY

figure = plt.figure()

ax = Axes3D(figure)
surf = ax.plot_surface(XX, YY, ZZ, cmap='jet')
plt.colorbar(surf)
ax.set_xlabel('Very very very long X LABEL')
ax.set_ylabel('Very very very long Y LABEL')
plt.savefig('test.png')
plt.close()

В результате самый нижний край получается чуть-чуть обрезан, именно эта проблема показана на первом же рисунке в гайду по tight_layout, однако использование tight_layout в приведенном выше коде приводит к исключению:

import numpy as np

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

x = np.linspace(0, 10, 256)
y = np.linspace(0, 4, 128)

XX, YY = np.meshgrid(x, y)
ZZ = XX * YY

figure = plt.figure()

ax = Axes3D(figure)
surf = ax.plot_surface(XX, YY, ZZ, cmap='jet')
plt.colorbar(surf)
ax.set_xlabel('Very very very long X LABEL')
ax.set_ylabel('Very very very long Y LABEL')
plt.tight_layout()
plt.savefig('test.png')
plt.close()
$ python2 test.py 
/usr/lib/python2.7/site-packages/matplotlib/figure.py:1742: UserWarning: This figure includes Axes that are not compatible with tight_layout, so its results might be incorrect.
  warnings.warn("This figure includes Axes that are not "
Traceback (most recent call last):
  File "test.py", line 20, in <module>
    plt.tight_layout()
  File "/usr/lib/python2.7/site-packages/matplotlib/pyplot.py", line 1387, in tight_layout
    fig.tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)
  File "/usr/lib/python2.7/site-packages/matplotlib/figure.py", line 1752, in tight_layout
    rect=rect)
  File "/usr/lib/python2.7/site-packages/matplotlib/tight_layout.py", line 322, in get_tight_layout_figure
    max_nrows = max(nrows_list)
ValueError: max() arg is an empty sequence

Может, кто сталкивался с подобным? Сходу не удается нагуглить.

P.S. Судя по тому, что в matplotlib все не очень гладко log scale с 3d параллельно где бы еще под онтопиком просто построить поверхность по имеющемуся массиву numpy.

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.