Nie mogę sprawić, aby pasek kolorów na wykresach imshow, takich jak ten, miał taką samą wysokość jak wykres, z wyjątkiem użycia Photoshopa po fakcie. Jak dopasować wysokości?
python
image
matplotlib
Elliot
źródło
źródło
fraction
lubshrink
args.Odpowiedzi:
Możesz to łatwo zrobić za pomocą AxisDivider matplotlib .
Przykład ze strony, do której prowadzi łącze, działa również bez korzystania z wykresów podrzędnych:
źródło
plt.title
, zostanie on zamieniony na prawo. Czy istnieje sposób, aby to przezwyciężyć?Ta kombinacja (i zbliżone do nich wartości) wydaje mi się „magicznie” działać, utrzymując pasek kolorów skalowany do wykresu, niezależnie od rozmiaru wyświetlacza.
Nie wymaga również współdzielenia osi, która może wyprowadzić wykres z kwadratu.
źródło
im_ratio = data.shape[0]/data.shape[1]
plt.colorbar(im,fraction=0.046*im_ratio, pad=0.04)
gdziedata
jest twój obraz.@bogatron udzielił już odpowiedzi sugerowanej przez dokumentację matplotlib , która daje odpowiednią wysokość, ale wprowadza inny problem. Teraz szerokość paska kolorów (jak również przestrzeń między paskiem kolorów a wykresem) zmienia się wraz z szerokością wykresu. Innymi słowy, współczynnik kształtu paska kolorów nie jest już ustalony.
Aby uzyskać zarówno odpowiednią wysokość, jak i dane proporcje, musisz zagłębić się nieco w tajemniczy
axes_grid1
moduł.Zwróć uwagę, że określa to szerokość paska kolorów w stosunku do wysokości wykresu (w przeciwieństwie do szerokości figury, tak jak było wcześniej).
Odstęp między paskiem kolorów a wykresem można teraz określić jako ułamek szerokości paska kolorów, co jest liczbą IMHO o wiele bardziej znaczącą niż ułamek szerokości figury.
AKTUALIZACJA:
Stworzyłem notatnik IPython na ten temat , w którym spakowałem powyższy kod do łatwej do ponownego wykorzystania funkcji:
Można go używać w następujący sposób:
źródło
Doceniam wszystkie powyższe odpowiedzi. Jednak, podobnie jak niektóre odpowiedzi i komentarze zauważono,
axes_grid1
moduł może nie GeoAxes adres, a regulacjafraction
,pad
,shrink
, i inne podobne parametry mogą niekoniecznie dają bardzo dokładny porządek, który naprawdę mnie martwi. Uważam, że dająccolorbar
jej własnyaxes
może być lepszym rozwiązaniem, aby rozwiązać wszystkie problemy, które zostały wymienione.Kod
Wynik
Później znajduję również
matplotlib.pyplot.colorbar
oficjalną dokumentacjęax
opcję, czyli istniejące osie, które zapewnią miejsce na pasek kolorów. Dlatego jest przydatna w przypadku wielu wykresów pomocniczych, patrz poniżej.Kod
Wynik
Ponownie, możesz również osiągnąć podobne efekty, określając cax, dokładniej z mojej perspektywy.
Kod
Wynik
źródło
Podczas tworzenia
colorbar
próby użyj parametrów fraction i / lub shrink.Z dokumentów:
źródło
colorbar()
funkcji lub metody.Wszystkie powyższe rozwiązania są dobre, ale najbardziej lubię @ Steve i @ bejota, ponieważ nie wymagają wyszukanych połączeń i są uniwersalne.
Przez uniwersalny rozumiem, że działa z każdym typem osi, w tym
GeoAxes
. Na przykład, jeśli masz rzutowane osie do mapowania:wezwanie do
zawiedzie z:
KeyException: map_projection
Dlatego jedynym uniwersalnym sposobem radzenia sobie z rozmiarem paska kolorów dla wszystkich typów osi jest:
Pracuj z ułamkiem od 0,035 do 0,046, aby uzyskać najlepszy rozmiar. Jednak wartości frakcji i paddig będą musiały zostać dostosowane, aby uzyskać najlepsze dopasowanie do wykresu i będą się różnić w zależności od tego, czy orientacja paska kolorów jest w pozycji pionowej, czy poziomej.
źródło
shrink
parametr, gdyfraction
razem zpad
nie dają one pożądanych rezultatów.