Я не могу сделать так, чтобы цветовая шкала на графиках imshow была такой же высоты, как и график, за исключением фактов использования Photoshop. Как мне получить высоту, чтобы соответствовать?
python
image
matplotlib
Эллиот
источник
источник
fraction
илиshrink
аргументы.Ответы:
Вы можете сделать это легко с помощью matplotlib AxisDivider .
Пример со связанной страницы также работает без использования вспомогательных участков:
источник
plt.title
, он будет отображаться поменять местами справа. Есть ли способ преодолеть это?Эта комбинация (и значения, близкие к этим), кажется, «волшебным образом» работает для меня, чтобы цветовая шкала соответствовала графику, независимо от размера дисплея.
Это также не требует разделения оси, которая может вывести график из квадрата.
источник
im_ratio = data.shape[0]/data.shape[1]
plt.colorbar(im,fraction=0.046*im_ratio, pad=0.04)
гдеdata
ваше изображение.@bogatron уже дал ответ, предложенный документами matplotlib , который выдает правильную высоту, но создает другую проблему. Теперь ширина цветовой шкалы (а также расстояние между цветовой шкалой и графиком) изменяется в зависимости от ширины графика. Другими словами, соотношение сторон цветовой шкалы больше не фиксируется.
Чтобы получить правильную высоту и заданное соотношение сторон, вам нужно немного глубже заглянуть в таинственный
axes_grid1
модуль.Обратите внимание, что это определяет ширину цветовой шкалы относительно высоты графика (в отличие от ширины рисунка, как это было раньше).
Интервал между цветовой шкалой и графиком теперь можно указывать в виде доли ширины цветовой шкалы, которая, на мой взгляд, является гораздо более значимым числом, чем доля ширины фигуры.
ОБНОВИТЬ:
Я создал блокнот IPython по этой теме , где я упаковал приведенный выше код в легко используемую функцию:
Это можно использовать так:
источник
Я ценю все ответы выше. Однако, как и некоторые ответы и комментарии указали,
axes_grid1
модуль может не адрес GeoAxes, тогда как регулировкаfraction
,pad
,shrink
и другие подобные параметры могут не обязательно дать очень точный порядок, который действительно беспокоит меня. Я считаю, что предоставлениеcolorbar
своегоaxes
может быть лучшим решением для решения всех вопросов, которые были упомянуты.Код
результат
Позже я нахожу
matplotlib.pyplot.colorbar
официальную документацию также даетax
опцию, которая представляет собой существующие оси, которые предоставят место для цветовой шкалы. Следовательно, это полезно для нескольких подзаговоров, см. Следующее.Код
результат
Опять же, вы также можете достичь аналогичных эффектов, указав cax, более точный способ с моей точки зрения.
Код
результат
источник
Когда вы создаете
colorbar
попробуйте использовать параметры дроби и / или сжатия.Из документов:
источник
colorbar()
функции или метода.Все вышеперечисленные решения хороши, но мне нравятся @ Steve's и @ bejota's лучше всего, поскольку они не включают в себя модные звонки и универсальны.
Под универсальным я подразумеваю, что работает с любым типом осей, включая
GeoAxes
. Например, если вы спроецировали оси для отображения:вызов
потерпит неудачу с:
KeyException: map_projection
Поэтому единственным универсальным способом определения размера цветовой шкалы для всех типов осей является:
Работайте с дробью от 0,035 до 0,046, чтобы получить лучший размер. Однако значения фракции и паддига необходимо будет отрегулировать так, чтобы они наилучшим образом подходили для вашего графика и будут различаться в зависимости от ориентации цветовой шкалы по вертикали или горизонтали.
источник
shrink
параметр, когдаfraction
вместе сpad
не дают желаемых результатов достаточно.