размер изображения matplotlib savefig с дюймами bbox= 'tight'

Я должен сделать векторный график, и я хочу просто увидеть векторы без осей, заголовков и т. д. Вот как я пытаюсь это сделать:

pyplot.figure(None, figsize=(10, 16), dpi=100)
pyplot.quiver(data['x'], data['y'], data['u'], data['v'], 
              pivot='tail', 
              units='dots', 
              scale=0.2,
              color='black')

pyplot.autoscale(tight=True)
pyplot.axis('off')
ax = pyplot.gca()
ax.xaxis.set_major_locator(pylab.NullLocator())
ax.yaxis.set_major_locator(pylab.NullLocator())
pyplot.savefig("test.png", 
               bbox_inches='tight', 
               transparent=True,
               pad_inches=0)

и, несмотря на мои усилия иметь изображение 1000 к 1600, я получаю один 775 к 1280. Как сделать его нужного размера? Спасибо.

обновление представленное решение работает, за исключением моего случая, мне также пришлось вручную установить пределы осей. В противном случае matplotlib не смог выяснить "плотную" ограничивающую коробку.

1 ответов


import matplotlib.pyplot as plt
import numpy as np
sin, cos = np.sin, np.cos

fig = plt.figure(frameon = False)
fig.set_size_inches(5, 8)
ax = plt.Axes(fig, [0., 0., 1., 1.], )
ax.set_axis_off()
fig.add_axes(ax)

x = np.linspace(-4, 4, 20)
y = np.linspace(-4, 4, 20)
X, Y = np.meshgrid(x, y)
deg = np.arctan(Y**3-3*Y-X)
plt.quiver(X, Y, cos(deg), sin(deg), pivot = 'tail', units = 'dots', color = 'red', )
plt.savefig('/tmp/test.png', dpi = 200)

доходность

enter image description here

вы можете сделать результирующее изображение 1000x1600 пикселей, установив цифру 5x8 дюймов

fig.set_size_inches(5, 8)

и сохранение с DPI = 200:

plt.savefig('/tmp/test.png', dpi = 200)

код для удаления границы был взят из здесь.

(изображение, размещенное выше, не масштабируется, так как 1000x1600 довольно большой).