Staram się poradzić sobie z moimi marginesami działki w matplotlib. Użyłem poniższego kodu do stworzenia mojego wykresu:
plt.imshow(g)
c = plt.colorbar()
c.set_label("Number of Slabs")
plt.savefig("OutputToUse.png")
Jednak otrzymuję wynik z dużą ilością białych znaków po obu stronach wykresu. Przeszukałem google i przeczytałem dokumentację matplotlib, ale nie mogę znaleźć sposobu, jak to zmniejszyć.
python
matplotlib
robintw
źródło
źródło
extent
naimshow
rysunku, lub ilość granicznego spacji w otrzymanej png, wokół rysunku, generowane przezsavefig
?savefig
- więc to właśnie chciałbym posortować.Odpowiedzi:
Jednym ze sposobów automatycznego zrobienia tego jest
bbox_inches='tight'
kwarg toplt.savefig
.Na przykład
Innym sposobem jest użycie
fig.tight_layout()
źródło
fig.savefig()
również. (plt.savefig()
nie zadziała w tym przypadku.)fig.tight_layout()
. Ta funkcja nie istniała, gdy pierwotnie pisano tę odpowiedź, w przeciwnym razie wspomniałbym o niej bardziej wyraźnie.fig = plt.gcf()
Możesz dostosować odstępy wokół figur matplotlib za pomocą funkcji subplots_adjust ():
Będzie to działać zarówno dla figury na ekranie, jak i zapisanej w pliku, i jest to właściwa funkcja do wywołania, nawet jeśli nie masz wielu wykresów na jednej figurze.
Liczby są ułamkami wymiarów figury i należy je dostosować, aby uwzględnić etykiety figur.
źródło
GridSpec
obiektach przez wywołanieupdate
metody (patrz stackoverflow.com/a/20058199/1030876 ).Wszystko czego potrzebujesz to
przed wyjściem.
Oprócz zmniejszenia marginesów powoduje to również ścisłe zgrupowanie przestrzeni między dowolnymi działkami pomocniczymi:
źródło
bbox_inches='tight'
, który po prostu przycina białą przestrzeń wokół krawędzi, ale pozostawia wykres sam. Stworzyłem figurę za pomocąplt.figure(figsize=(10,3))
.Po prostu użyj,
ax = fig.add_axes([left, bottom, width, height])
jeśli chcesz mieć dokładną kontrolę nad układem figury. na przykład.źródło
W przypadku gdyby ktoś zastanawiał się, jak pozbyć się reszty białego marginesu po zastosowaniu
plt.tight_layout()
lubfig.tight_layout()
: Za pomocą parametrupad
(który jest1.08
domyślnie) możesz go jeszcze bardziej zacisnąć: „Wypełnienie między krawędzią figury a krawędziami podploty, jako ułamek rozmiaru czcionki. " Na przykładzredukuje go do bardzo małego marginesu. Umieszczanie
0
nie działa dla mnie, ponieważ powoduje też, że pole wątku cząstkowego jest trochę odcięte.źródło
źródło
savefig
funkcji jest eleganckie, jednak wartość ujemna dlapad_inches
niekoniecznie jest potrzebna w każdym przypadku.Problem z matplotlibs subplots_adjust polega na tym, że wartości, które wprowadzasz, odnoszą się do xiy wielkości figury. Ten przykład dotyczy poprawnego rysowania przy drukowaniu pliku PDF:
W tym celu ponownie obliczam względne odstępy na wartości bezwzględne w następujący sposób:
dla figury „figure.xsize” w calach w wymiarze x i „figure.ysize” w calach w wymiarze y. Tak więc cała figura ma lewy margines 5 mm, dolny 4 mm, prawy 1 mm i górny 3 mm wewnątrz etykiet. Konwersja (x / 25,4) jest wykonywana, ponieważ potrzebowałem przeliczyć mm na cale.
Zwróć uwagę, że czysty rozmiar wykresu x będzie miał postać „figure.xsize - lewy margines - prawy margines”, a czysty rozmiar wykresu y będzie równy „figura.ysize - dolny margines - górny margines” w calach
Inne sniplety (nie jestem pewien co do tych, chciałem tylko podać pozostałe parametry)
i
źródło
xsize
iysize
od. Korzystam z tych właściwości i otrzymujęAttributeError: 'Figure' object has no attribute 'xsize'
zainspirowany powyższą odpowiedzią Sammysa:
Gdzie figsize to krotka, której użyłeś
fig = pyplot.figure(figsize=...)
źródło
Dla mnie powyższe odpowiedzi nie działały
matplotlib.__version__ = 1.4.3
na Win7. Tak więc, jeśli interesuje nas tylko sam obraz (tj. Jeśli nie potrzebujemy adnotacji, osi, znaczników, tytułu, ylabel itp.), Lepiej jest po prostu zapisać tablicę numpy jako obraz zamiastsavefig
.Ponadto, używając funkcji rysowania opencv (cv2.line, cv2.polylines), możemy wykonać kilka rysunków bezpośrednio na tablicy numpy. http://docs.opencv.org/2.4/modules/core/doc/drawing_functions.html
źródło
W przypadku ostatnich wersji matplotlib możesz chcieć wypróbować układ ograniczony .
źródło