Фон цветовой панели Matplotlib и размещение метки

До недавнего времени я использовал Mathematica для своих графиков. Хотя это была настоящая боль, и все приходилось делать вручную, результаты были очень близки к тому, что я хотел. Один из примеров следующий:

Пример графика Mathematica

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

Пример графика Mathematica

Но у меня есть еще две проблемы:

  1. Я не знаю, как сделать прямоугольник со скругленными углами на заднем плане. Я посмотрел на патч fancybbox, но не заставил его работать с цветовой полосой так, как я хочу. Как лучше всего получить что-то вроде коробки Mathematica? Для легенды на графиках, кажется, есть причудливая опция bbox... но не для цветных полос
  2. Когда я использую «меньший знак» (‹), метка цветной полосы смещается слишком далеко вправо. Как я могу настроить это (может быть, даже «между» числами, как на графике Mathematica)?

Я с нетерпением жду любых предложений, указывающих в правильном направлении :).


person oli    schedule 23.08.2013    source источник
comment
stackoverflow.com /questions/15882249/ ‹- как настроить отступы на галочках   -  person tacaswell    schedule 23.08.2013
comment
И, пожалуйста, покажите нам код.   -  person tacaswell    schedule 23.08.2013
comment
В сторону: очень шикарные данные.   -  person kdbanman    schedule 31.05.2021


Ответы (1)


На ваш второй вопрос: вы можете использовать отрицательное значение labelpad, чтобы переместить метку обратно к меткам, например так:

import numpy as np
import matplotlib.pyplot as plt

data = np.linspace(0, 10, num=256).reshape(16,16) 

cf = plt.contourf(data, levels=(0, 2.5, 5, 7.5, 10))
cb = plt.colorbar(cf)

cb.set_ticklabels([r'$<10^{0}$', 1, 2, r'$10^{14}$', r'$10^{14}+12345678$'])
cb.set_label(r'$n_e$ in $m^{-3}$', labelpad=-40, y=0.45)

plt.show()

С помощью параметра y можно дополнительно переместить метку вверх или вниз для лучшей симметрии.

Аргумент labelpad задается в пунктах (1/72 дюйма). y принимает значения в [0, 1], 0.0 — нижняя граница, а 1.0 — верхняя.

Результат:

Вывод сценария

person mwil.me    schedule 24.08.2013
comment
y не ограничивается интервалом [0.0, 1.0]. Он может принимать любое число с плавающей запятой/целое число. Если y > 1.0, метка будет размещена над верхней частью оси, а если y < 0.0, она будет размещена ниже нижней части оси. Координаты оси нормализованы, что означает, что 0.0 является началом, а 1.0 концом экстента оси. - person sodd; 25.08.2013
comment
Просто для ясности: [0, 1] - это интервальная запись, а не запись списка. Таким образом, это означает от 0 до 1 включительно. Это относится как к ответу, так и к комментарию выше. - person sodd; 25.08.2013
comment
Не могли бы вы сказать мне, где вы найдете такие параметры, как y и labelpad, потому что я не нашел их в документация или исходный код? - person Fei Yao; 30.10.2019
comment
Я случайно обнаружил, что cb.set_label на самом деле является текстом и следовательно, y - это текстовые свойства. Все еще интересно, как определить более подробную информацию о **kw, найденную в этом страница. - person Fei Yao; 30.10.2019