2012-10-22 7 views
9

muszę zrobić wykres wektorowy i chcę po prostu zobaczyć wektory bez osi, tytuły itp Więc tutaj jest jak próbuję to zrobić:matplotlib savefig rozmiar obrazu z bbox_inches = „mocno”

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) 

i pomimo moich starań, aby uzyskać obraz 1000 przed 1600, otrzymuję jeden 775 na 1280. Jak ustawić żądany rozmiar? Dziękuję.

AKTUALIZACJA Przedstawione rozwiązanie działa, poza tym w moim przypadku musiałem również ręcznie ustawić ograniczenia osi. W przeciwnym razie matplotlib nie mógł rozgryźć "ciasnej" ramki granicznej.

+2

W MPL istnieją dwie wartości DPI, które należy zachować prosto. Ten, który określiłeś podczas tworzenia obiektu 'figure' służy do interaktywnego wyświetlania postaci na ekranie. Inna wartość DPI odnosi się do zapisanego pliku (w dowolnym formacie) podanego podczas wywoływania 'savefig'. Dlatego rozwiązanie @unutbu opublikowane działa. –

Odpowiedz

12
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) 

daje

enter image description here

Można dokonać Uzyskany obraz 1000x1600 pikseli, ustawiając figurę być 5x8 cali

fig.set_size_inches(5, 8) 

i zapisywanie z DPI = 200:

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

Kod do usunięcia obramowania został pobrany z here.

(Obrazek zamieszczony powyżej nie ma skali, ponieważ 1000x1600 jest dość duży).

Powiązane problemy